Rework ADSP into a wrapper for apps
This commit is contained in:
parent
5ce41fa213
commit
ebd19dec99
173 changed files with 1059 additions and 1265 deletions
|
@ -16,7 +16,7 @@
|
|||
#include "audio_core/renderer/voice/voice_info.h"
|
||||
#include "audio_core/renderer/voice/voice_state.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace AudioCore::Renderer {
|
||||
|
||||
template <typename T, CommandId Id>
|
||||
T& CommandBuffer::GenerateStart(const s32 node_id) {
|
||||
|
@ -713,4 +713,4 @@ void CommandBuffer::GenerateCompressorCommand(s16 buffer_offset, EffectInfoBase&
|
|||
GenerateEnd<CompressorCommand>(cmd);
|
||||
}
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
#include "audio_core/renderer/performance/performance_manager.h"
|
||||
#include "common/common_types.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace AudioCore::Renderer {
|
||||
struct UpsamplerInfo;
|
||||
struct VoiceState;
|
||||
class EffectInfoBase;
|
||||
|
@ -465,4 +465,4 @@ private:
|
|||
void GenerateEnd(T& cmd);
|
||||
};
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
#include "audio_core/renderer/voice/voice_context.h"
|
||||
#include "common/alignment.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace AudioCore::Renderer {
|
||||
|
||||
CommandGenerator::CommandGenerator(CommandBuffer& command_buffer_,
|
||||
const CommandListHeader& command_list_header_,
|
||||
|
@ -793,4 +793,4 @@ void CommandGenerator::GeneratePerformanceCommand(
|
|||
command_buffer.GeneratePerformanceCommand(node_id, state, entry_addresses);
|
||||
}
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
namespace AudioCore {
|
||||
struct AudioRendererSystemContext;
|
||||
|
||||
namespace AudioRenderer {
|
||||
namespace Renderer {
|
||||
class CommandBuffer;
|
||||
struct CommandListHeader;
|
||||
class VoiceContext;
|
||||
|
@ -345,5 +345,5 @@ private:
|
|||
PerformanceManager* performance_manager;
|
||||
};
|
||||
|
||||
} // namespace AudioRenderer
|
||||
} // namespace Renderer
|
||||
} // namespace AudioCore
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
#include "audio_core/common/common.h"
|
||||
#include "common/common_types.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace AudioCore::Renderer {
|
||||
|
||||
struct CommandListHeader {
|
||||
u64 buffer_size;
|
||||
|
@ -19,4 +19,4 @@ struct CommandListHeader {
|
|||
u32 sample_rate;
|
||||
};
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
#include "audio_core/renderer/command/command_processing_time_estimator.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace AudioCore::Renderer {
|
||||
|
||||
u32 CommandProcessingTimeEstimatorVersion1::Estimate(
|
||||
const PcmInt16DataSourceVersion1Command& command) const {
|
||||
|
@ -3617,4 +3617,4 @@ u32 CommandProcessingTimeEstimatorVersion5::Estimate(const CompressorCommand& co
|
|||
}
|
||||
}
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
#include "audio_core/renderer/command/commands.h"
|
||||
#include "common/common_types.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace AudioCore::Renderer {
|
||||
/**
|
||||
* Estimate the processing time required for all commands.
|
||||
*/
|
||||
|
@ -251,4 +251,4 @@ private:
|
|||
u32 buffer_count{};
|
||||
};
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -3,20 +3,20 @@
|
|||
|
||||
#include <span>
|
||||
|
||||
#include "audio_core/renderer/adsp/command_list_processor.h"
|
||||
#include "audio_core/adsp/apps/audio_renderer/command_list_processor.h"
|
||||
#include "audio_core/renderer/command/data_source/adpcm.h"
|
||||
#include "audio_core/renderer/command/data_source/decode.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace AudioCore::Renderer {
|
||||
|
||||
void AdpcmDataSourceVersion1Command::Dump(const ADSP::CommandListProcessor& processor,
|
||||
void AdpcmDataSourceVersion1Command::Dump(const AudioRenderer::CommandListProcessor& processor,
|
||||
std::string& string) {
|
||||
string += fmt::format("AdpcmDataSourceVersion1Command\n\toutput_index {:02X} source sample "
|
||||
"rate {} target sample rate {} src quality {}\n",
|
||||
output_index, sample_rate, processor.target_sample_rate, src_quality);
|
||||
}
|
||||
|
||||
void AdpcmDataSourceVersion1Command::Process(const ADSP::CommandListProcessor& processor) {
|
||||
void AdpcmDataSourceVersion1Command::Process(const AudioRenderer::CommandListProcessor& processor) {
|
||||
auto out_buffer{processor.mix_buffers.subspan(output_index * processor.sample_count,
|
||||
processor.sample_count)};
|
||||
|
||||
|
@ -41,18 +41,18 @@ void AdpcmDataSourceVersion1Command::Process(const ADSP::CommandListProcessor& p
|
|||
DecodeFromWaveBuffers(*processor.memory, args);
|
||||
}
|
||||
|
||||
bool AdpcmDataSourceVersion1Command::Verify(const ADSP::CommandListProcessor& processor) {
|
||||
bool AdpcmDataSourceVersion1Command::Verify(const AudioRenderer::CommandListProcessor& processor) {
|
||||
return true;
|
||||
}
|
||||
|
||||
void AdpcmDataSourceVersion2Command::Dump(const ADSP::CommandListProcessor& processor,
|
||||
void AdpcmDataSourceVersion2Command::Dump(const AudioRenderer::CommandListProcessor& processor,
|
||||
std::string& string) {
|
||||
string += fmt::format("AdpcmDataSourceVersion2Command\n\toutput_index {:02X} source sample "
|
||||
"rate {} target sample rate {} src quality {}\n",
|
||||
output_index, sample_rate, processor.target_sample_rate, src_quality);
|
||||
}
|
||||
|
||||
void AdpcmDataSourceVersion2Command::Process(const ADSP::CommandListProcessor& processor) {
|
||||
void AdpcmDataSourceVersion2Command::Process(const AudioRenderer::CommandListProcessor& processor) {
|
||||
auto out_buffer{processor.mix_buffers.subspan(output_index * processor.sample_count,
|
||||
processor.sample_count)};
|
||||
|
||||
|
@ -77,8 +77,8 @@ void AdpcmDataSourceVersion2Command::Process(const ADSP::CommandListProcessor& p
|
|||
DecodeFromWaveBuffers(*processor.memory, args);
|
||||
}
|
||||
|
||||
bool AdpcmDataSourceVersion2Command::Verify(const ADSP::CommandListProcessor& processor) {
|
||||
bool AdpcmDataSourceVersion2Command::Verify(const AudioRenderer::CommandListProcessor& processor) {
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -11,11 +11,12 @@
|
|||
#include "audio_core/renderer/command/icommand.h"
|
||||
#include "common/common_types.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace ADSP {
|
||||
namespace AudioCore::ADSP::AudioRenderer {
|
||||
class CommandListProcessor;
|
||||
}
|
||||
|
||||
namespace AudioCore::Renderer {
|
||||
|
||||
/**
|
||||
* AudioRenderer command to decode ADPCM-encoded version 1 wavebuffers
|
||||
* into the output_index mix buffer.
|
||||
|
@ -27,14 +28,14 @@ struct AdpcmDataSourceVersion1Command : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @param string - The string to print into.
|
||||
*/
|
||||
void Dump(const ADSP::CommandListProcessor& processor, std::string& string) override;
|
||||
void Dump(const AudioRenderer::CommandListProcessor& processor, std::string& string) override;
|
||||
|
||||
/**
|
||||
* Process this command.
|
||||
*
|
||||
* @param processor - The CommandListProcessor processing this command.
|
||||
*/
|
||||
void Process(const ADSP::CommandListProcessor& processor) override;
|
||||
void Process(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/**
|
||||
* Verify this command's data is valid.
|
||||
|
@ -42,13 +43,13 @@ struct AdpcmDataSourceVersion1Command : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @return True if the command is valid, otherwise false.
|
||||
*/
|
||||
bool Verify(const ADSP::CommandListProcessor& processor) override;
|
||||
bool Verify(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/// Quality used for sample rate conversion
|
||||
SrcQuality src_quality;
|
||||
/// Mix buffer index for decoded samples
|
||||
s16 output_index;
|
||||
/// Flags to control decoding (see AudioCore::AudioRenderer::VoiceInfo::Flags)
|
||||
/// Flags to control decoding (see AudioCore::Renderer::VoiceInfo::Flags)
|
||||
u16 flags;
|
||||
/// Wavebuffer sample rate
|
||||
u32 sample_rate;
|
||||
|
@ -75,14 +76,14 @@ struct AdpcmDataSourceVersion2Command : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @param string - The string to print into.
|
||||
*/
|
||||
void Dump(const ADSP::CommandListProcessor& processor, std::string& string) override;
|
||||
void Dump(const AudioRenderer::CommandListProcessor& processor, std::string& string) override;
|
||||
|
||||
/**
|
||||
* Process this command.
|
||||
*
|
||||
* @param processor - The CommandListProcessor processing this command.
|
||||
*/
|
||||
void Process(const ADSP::CommandListProcessor& processor) override;
|
||||
void Process(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/**
|
||||
* Verify this command's data is valid.
|
||||
|
@ -90,13 +91,13 @@ struct AdpcmDataSourceVersion2Command : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @return True if the command is valid, otherwise false.
|
||||
*/
|
||||
bool Verify(const ADSP::CommandListProcessor& processor) override;
|
||||
bool Verify(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/// Quality used for sample rate conversion
|
||||
SrcQuality src_quality;
|
||||
/// Mix buffer index for decoded samples
|
||||
s16 output_index;
|
||||
/// Flags to control decoding (see AudioCore::AudioRenderer::VoiceInfo::Flags)
|
||||
/// Flags to control decoding (see AudioCore::Renderer::VoiceInfo::Flags)
|
||||
u16 flags;
|
||||
/// Wavebuffer sample rate
|
||||
u32 sample_rate;
|
||||
|
@ -116,4 +117,4 @@ struct AdpcmDataSourceVersion2Command : ICommand {
|
|||
u64 data_size;
|
||||
};
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
#include "common/scratch_buffer.h"
|
||||
#include "core/memory.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace AudioCore::Renderer {
|
||||
|
||||
constexpr u32 TempBufferSize = 0x3F00;
|
||||
constexpr std::array<u8, 3> PitchBySrcQuality = {4, 8, 4};
|
||||
|
@ -364,7 +364,7 @@ void DecodeFromWaveBuffers(Core::Memory::Memory& memory, const DecodeFromWaveBuf
|
|||
wavebuffers_consumed++;
|
||||
} else {
|
||||
voice_state.loop_count++;
|
||||
if (wavebuffer.loop_count > 0 &&
|
||||
if (wavebuffer.loop_count >= 0 &&
|
||||
(voice_state.loop_count > wavebuffer.loop_count || samples_decoded == 0)) {
|
||||
voice_state.wave_buffer_valid[wavebuffer_index] = false;
|
||||
voice_state.loop_count = 0;
|
||||
|
@ -423,4 +423,4 @@ void DecodeFromWaveBuffers(Core::Memory::Memory& memory, const DecodeFromWaveBuf
|
|||
voice_state.fraction = fraction;
|
||||
}
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -15,7 +15,7 @@ namespace Core::Memory {
|
|||
class Memory;
|
||||
}
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace AudioCore::Renderer {
|
||||
|
||||
struct DecodeFromWaveBuffersArgs {
|
||||
SampleFormat sample_format;
|
||||
|
@ -56,4 +56,4 @@ struct DecodeArg {
|
|||
*/
|
||||
void DecodeFromWaveBuffers(Core::Memory::Memory& memory, const DecodeFromWaveBuffersArgs& args);
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include "audio_core/renderer/adsp/command_list_processor.h"
|
||||
#include "audio_core/adsp/apps/audio_renderer/command_list_processor.h"
|
||||
#include "audio_core/renderer/command/data_source/decode.h"
|
||||
#include "audio_core/renderer/command/data_source/pcm_float.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace AudioCore::Renderer {
|
||||
|
||||
void PcmFloatDataSourceVersion1Command::Dump(const ADSP::CommandListProcessor& processor,
|
||||
void PcmFloatDataSourceVersion1Command::Dump(const AudioRenderer::CommandListProcessor& processor,
|
||||
std::string& string) {
|
||||
string +=
|
||||
fmt::format("PcmFloatDataSourceVersion1Command\n\toutput_index {:02X} channel {} "
|
||||
|
@ -16,7 +16,8 @@ void PcmFloatDataSourceVersion1Command::Dump(const ADSP::CommandListProcessor& p
|
|||
processor.target_sample_rate, src_quality);
|
||||
}
|
||||
|
||||
void PcmFloatDataSourceVersion1Command::Process(const ADSP::CommandListProcessor& processor) {
|
||||
void PcmFloatDataSourceVersion1Command::Process(
|
||||
const AudioRenderer::CommandListProcessor& processor) {
|
||||
auto out_buffer = processor.mix_buffers.subspan(output_index * processor.sample_count,
|
||||
processor.sample_count);
|
||||
|
||||
|
@ -41,11 +42,12 @@ void PcmFloatDataSourceVersion1Command::Process(const ADSP::CommandListProcessor
|
|||
DecodeFromWaveBuffers(*processor.memory, args);
|
||||
}
|
||||
|
||||
bool PcmFloatDataSourceVersion1Command::Verify(const ADSP::CommandListProcessor& processor) {
|
||||
bool PcmFloatDataSourceVersion1Command::Verify(
|
||||
const AudioRenderer::CommandListProcessor& processor) {
|
||||
return true;
|
||||
}
|
||||
|
||||
void PcmFloatDataSourceVersion2Command::Dump(const ADSP::CommandListProcessor& processor,
|
||||
void PcmFloatDataSourceVersion2Command::Dump(const AudioRenderer::CommandListProcessor& processor,
|
||||
std::string& string) {
|
||||
string +=
|
||||
fmt::format("PcmFloatDataSourceVersion2Command\n\toutput_index {:02X} channel {} "
|
||||
|
@ -54,7 +56,8 @@ void PcmFloatDataSourceVersion2Command::Dump(const ADSP::CommandListProcessor& p
|
|||
processor.target_sample_rate, src_quality);
|
||||
}
|
||||
|
||||
void PcmFloatDataSourceVersion2Command::Process(const ADSP::CommandListProcessor& processor) {
|
||||
void PcmFloatDataSourceVersion2Command::Process(
|
||||
const AudioRenderer::CommandListProcessor& processor) {
|
||||
auto out_buffer = processor.mix_buffers.subspan(output_index * processor.sample_count,
|
||||
processor.sample_count);
|
||||
|
||||
|
@ -79,8 +82,9 @@ void PcmFloatDataSourceVersion2Command::Process(const ADSP::CommandListProcessor
|
|||
DecodeFromWaveBuffers(*processor.memory, args);
|
||||
}
|
||||
|
||||
bool PcmFloatDataSourceVersion2Command::Verify(const ADSP::CommandListProcessor& processor) {
|
||||
bool PcmFloatDataSourceVersion2Command::Verify(
|
||||
const AudioRenderer::CommandListProcessor& processor) {
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -9,11 +9,12 @@
|
|||
#include "audio_core/renderer/command/icommand.h"
|
||||
#include "common/common_types.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace ADSP {
|
||||
namespace AudioCore::ADSP::AudioRenderer {
|
||||
class CommandListProcessor;
|
||||
}
|
||||
|
||||
namespace AudioCore::Renderer {
|
||||
|
||||
/**
|
||||
* AudioRenderer command to decode PCM float-encoded version 1 wavebuffers
|
||||
* into the output_index mix buffer.
|
||||
|
@ -25,14 +26,14 @@ struct PcmFloatDataSourceVersion1Command : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @param string - The string to print into.
|
||||
*/
|
||||
void Dump(const ADSP::CommandListProcessor& processor, std::string& string) override;
|
||||
void Dump(const AudioRenderer::CommandListProcessor& processor, std::string& string) override;
|
||||
|
||||
/**
|
||||
* Process this command.
|
||||
*
|
||||
* @param processor - The CommandListProcessor processing this command.
|
||||
*/
|
||||
void Process(const ADSP::CommandListProcessor& processor) override;
|
||||
void Process(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/**
|
||||
* Verify this command's data is valid.
|
||||
|
@ -40,13 +41,13 @@ struct PcmFloatDataSourceVersion1Command : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @return True if the command is valid, otherwise false.
|
||||
*/
|
||||
bool Verify(const ADSP::CommandListProcessor& processor) override;
|
||||
bool Verify(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/// Quality used for sample rate conversion
|
||||
SrcQuality src_quality;
|
||||
/// Mix buffer index for decoded samples
|
||||
s16 output_index;
|
||||
/// Flags to control decoding (see AudioCore::AudioRenderer::VoiceInfo::Flags)
|
||||
/// Flags to control decoding (see AudioCore::Renderer::VoiceInfo::Flags)
|
||||
u16 flags;
|
||||
/// Wavebuffer sample rate
|
||||
u32 sample_rate;
|
||||
|
@ -73,14 +74,14 @@ struct PcmFloatDataSourceVersion2Command : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @param string - The string to print into.
|
||||
*/
|
||||
void Dump(const ADSP::CommandListProcessor& processor, std::string& string) override;
|
||||
void Dump(const AudioRenderer::CommandListProcessor& processor, std::string& string) override;
|
||||
|
||||
/**
|
||||
* Process this command.
|
||||
*
|
||||
* @param processor - The CommandListProcessor processing this command.
|
||||
*/
|
||||
void Process(const ADSP::CommandListProcessor& processor) override;
|
||||
void Process(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/**
|
||||
* Verify this command's data is valid.
|
||||
|
@ -88,13 +89,13 @@ struct PcmFloatDataSourceVersion2Command : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @return True if the command is valid, otherwise false.
|
||||
*/
|
||||
bool Verify(const ADSP::CommandListProcessor& processor) override;
|
||||
bool Verify(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/// Quality used for sample rate conversion
|
||||
SrcQuality src_quality;
|
||||
/// Mix buffer index for decoded samples
|
||||
s16 output_index;
|
||||
/// Flags to control decoding (see AudioCore::AudioRenderer::VoiceInfo::Flags)
|
||||
/// Flags to control decoding (see AudioCore::Renderer::VoiceInfo::Flags)
|
||||
u16 flags;
|
||||
/// Wavebuffer sample rate
|
||||
u32 sample_rate;
|
||||
|
@ -110,4 +111,4 @@ struct PcmFloatDataSourceVersion2Command : ICommand {
|
|||
CpuAddr voice_state;
|
||||
};
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -3,13 +3,13 @@
|
|||
|
||||
#include <span>
|
||||
|
||||
#include "audio_core/renderer/adsp/command_list_processor.h"
|
||||
#include "audio_core/adsp/apps/audio_renderer/command_list_processor.h"
|
||||
#include "audio_core/renderer/command/data_source/decode.h"
|
||||
#include "audio_core/renderer/command/data_source/pcm_int16.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace AudioCore::Renderer {
|
||||
|
||||
void PcmInt16DataSourceVersion1Command::Dump(const ADSP::CommandListProcessor& processor,
|
||||
void PcmInt16DataSourceVersion1Command::Dump(const AudioRenderer::CommandListProcessor& processor,
|
||||
std::string& string) {
|
||||
string +=
|
||||
fmt::format("PcmInt16DataSourceVersion1Command\n\toutput_index {:02X} channel {} "
|
||||
|
@ -18,7 +18,8 @@ void PcmInt16DataSourceVersion1Command::Dump(const ADSP::CommandListProcessor& p
|
|||
processor.target_sample_rate, src_quality);
|
||||
}
|
||||
|
||||
void PcmInt16DataSourceVersion1Command::Process(const ADSP::CommandListProcessor& processor) {
|
||||
void PcmInt16DataSourceVersion1Command::Process(
|
||||
const AudioRenderer::CommandListProcessor& processor) {
|
||||
auto out_buffer = processor.mix_buffers.subspan(output_index * processor.sample_count,
|
||||
processor.sample_count);
|
||||
|
||||
|
@ -43,11 +44,12 @@ void PcmInt16DataSourceVersion1Command::Process(const ADSP::CommandListProcessor
|
|||
DecodeFromWaveBuffers(*processor.memory, args);
|
||||
}
|
||||
|
||||
bool PcmInt16DataSourceVersion1Command::Verify(const ADSP::CommandListProcessor& processor) {
|
||||
bool PcmInt16DataSourceVersion1Command::Verify(
|
||||
const AudioRenderer::CommandListProcessor& processor) {
|
||||
return true;
|
||||
}
|
||||
|
||||
void PcmInt16DataSourceVersion2Command::Dump(const ADSP::CommandListProcessor& processor,
|
||||
void PcmInt16DataSourceVersion2Command::Dump(const AudioRenderer::CommandListProcessor& processor,
|
||||
std::string& string) {
|
||||
string +=
|
||||
fmt::format("PcmInt16DataSourceVersion2Command\n\toutput_index {:02X} channel {} "
|
||||
|
@ -56,7 +58,8 @@ void PcmInt16DataSourceVersion2Command::Dump(const ADSP::CommandListProcessor& p
|
|||
processor.target_sample_rate, src_quality);
|
||||
}
|
||||
|
||||
void PcmInt16DataSourceVersion2Command::Process(const ADSP::CommandListProcessor& processor) {
|
||||
void PcmInt16DataSourceVersion2Command::Process(
|
||||
const AudioRenderer::CommandListProcessor& processor) {
|
||||
auto out_buffer = processor.mix_buffers.subspan(output_index * processor.sample_count,
|
||||
processor.sample_count);
|
||||
DecodeFromWaveBuffersArgs args{
|
||||
|
@ -80,8 +83,9 @@ void PcmInt16DataSourceVersion2Command::Process(const ADSP::CommandListProcessor
|
|||
DecodeFromWaveBuffers(*processor.memory, args);
|
||||
}
|
||||
|
||||
bool PcmInt16DataSourceVersion2Command::Verify(const ADSP::CommandListProcessor& processor) {
|
||||
bool PcmInt16DataSourceVersion2Command::Verify(
|
||||
const AudioRenderer::CommandListProcessor& processor) {
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -9,11 +9,12 @@
|
|||
#include "audio_core/renderer/command/icommand.h"
|
||||
#include "common/common_types.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace ADSP {
|
||||
namespace AudioCore::ADSP::AudioRenderer {
|
||||
class CommandListProcessor;
|
||||
}
|
||||
|
||||
namespace AudioCore::Renderer {
|
||||
|
||||
/**
|
||||
* AudioRenderer command to decode PCM s16-encoded version 1 wavebuffers
|
||||
* into the output_index mix buffer.
|
||||
|
@ -25,14 +26,14 @@ struct PcmInt16DataSourceVersion1Command : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @param string - The string to print into.
|
||||
*/
|
||||
void Dump(const ADSP::CommandListProcessor& processor, std::string& string) override;
|
||||
void Dump(const AudioRenderer::CommandListProcessor& processor, std::string& string) override;
|
||||
|
||||
/**
|
||||
* Process this command.
|
||||
*
|
||||
* @param processor - The CommandListProcessor processing this command.
|
||||
*/
|
||||
void Process(const ADSP::CommandListProcessor& processor) override;
|
||||
void Process(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/**
|
||||
* Verify this command's data is valid.
|
||||
|
@ -40,13 +41,13 @@ struct PcmInt16DataSourceVersion1Command : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @return True if the command is valid, otherwise false.
|
||||
*/
|
||||
bool Verify(const ADSP::CommandListProcessor& processor) override;
|
||||
bool Verify(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/// Quality used for sample rate conversion
|
||||
SrcQuality src_quality;
|
||||
/// Mix buffer index for decoded samples
|
||||
s16 output_index;
|
||||
/// Flags to control decoding (see AudioCore::AudioRenderer::VoiceInfo::Flags)
|
||||
/// Flags to control decoding (see AudioCore::Renderer::VoiceInfo::Flags)
|
||||
u16 flags;
|
||||
/// Wavebuffer sample rate
|
||||
u32 sample_rate;
|
||||
|
@ -72,26 +73,26 @@ struct PcmInt16DataSourceVersion2Command : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @param string - The string to print into.
|
||||
*/
|
||||
void Dump(const ADSP::CommandListProcessor& processor, std::string& string) override;
|
||||
void Dump(const AudioRenderer::CommandListProcessor& processor, std::string& string) override;
|
||||
|
||||
/**
|
||||
* Process this command.
|
||||
* @param processor - The CommandListProcessor processing this command.
|
||||
*/
|
||||
void Process(const ADSP::CommandListProcessor& processor) override;
|
||||
void Process(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/**
|
||||
* Verify this command's data is valid.
|
||||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @return True if the command is valid, otherwise false.
|
||||
*/
|
||||
bool Verify(const ADSP::CommandListProcessor& processor) override;
|
||||
bool Verify(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/// Quality used for sample rate conversion
|
||||
SrcQuality src_quality;
|
||||
/// Mix buffer index for decoded samples
|
||||
s16 output_index;
|
||||
/// Flags to control decoding (see AudioCore::AudioRenderer::VoiceInfo::Flags)
|
||||
/// Flags to control decoding (see AudioCore::Renderer::VoiceInfo::Flags)
|
||||
u16 flags;
|
||||
/// Wavebuffer sample rate
|
||||
u32 sample_rate;
|
||||
|
@ -107,4 +108,4 @@ struct PcmInt16DataSourceVersion2Command : ICommand {
|
|||
CpuAddr voice_state;
|
||||
};
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include "audio_core/renderer/adsp/command_list_processor.h"
|
||||
#include "audio_core/adsp/apps/audio_renderer/command_list_processor.h"
|
||||
#include "audio_core/renderer/command/effect/aux_.h"
|
||||
#include "audio_core/renderer/effect/aux_.h"
|
||||
#include "core/core.h"
|
||||
#include "core/memory.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace AudioCore::Renderer {
|
||||
/**
|
||||
* Reset an AuxBuffer.
|
||||
*
|
||||
|
@ -175,13 +175,13 @@ static u32 ReadAuxBufferDsp(Core::Memory::Memory& memory, CpuAddr return_info_,
|
|||
return read_count_;
|
||||
}
|
||||
|
||||
void AuxCommand::Dump([[maybe_unused]] const ADSP::CommandListProcessor& processor,
|
||||
void AuxCommand::Dump([[maybe_unused]] const AudioRenderer::CommandListProcessor& processor,
|
||||
std::string& string) {
|
||||
string += fmt::format("AuxCommand\n\tenabled {} input {:02X} output {:02X}\n", effect_enabled,
|
||||
input, output);
|
||||
}
|
||||
|
||||
void AuxCommand::Process(const ADSP::CommandListProcessor& processor) {
|
||||
void AuxCommand::Process(const AudioRenderer::CommandListProcessor& processor) {
|
||||
auto input_buffer{
|
||||
processor.mix_buffers.subspan(input * processor.sample_count, processor.sample_count)};
|
||||
auto output_buffer{
|
||||
|
@ -208,8 +208,8 @@ void AuxCommand::Process(const ADSP::CommandListProcessor& processor) {
|
|||
}
|
||||
}
|
||||
|
||||
bool AuxCommand::Verify(const ADSP::CommandListProcessor& processor) {
|
||||
bool AuxCommand::Verify(const AudioRenderer::CommandListProcessor& processor) {
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -8,11 +8,12 @@
|
|||
#include "audio_core/renderer/command/icommand.h"
|
||||
#include "common/common_types.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace ADSP {
|
||||
namespace AudioCore::ADSP::AudioRenderer {
|
||||
class CommandListProcessor;
|
||||
}
|
||||
|
||||
namespace AudioCore::Renderer {
|
||||
|
||||
/**
|
||||
* AudioRenderer command to read and write an auxiliary buffer, writing the input mix buffer to game
|
||||
* memory, and reading into the output buffer from game memory.
|
||||
|
@ -24,14 +25,14 @@ struct AuxCommand : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @param string - The string to print into.
|
||||
*/
|
||||
void Dump(const ADSP::CommandListProcessor& processor, std::string& string) override;
|
||||
void Dump(const AudioRenderer::CommandListProcessor& processor, std::string& string) override;
|
||||
|
||||
/**
|
||||
* Process this command.
|
||||
*
|
||||
* @param processor - The CommandListProcessor processing this command.
|
||||
*/
|
||||
void Process(const ADSP::CommandListProcessor& processor) override;
|
||||
void Process(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/**
|
||||
* Verify this command's data is valid.
|
||||
|
@ -39,7 +40,7 @@ struct AuxCommand : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @return True if the command is valid, otherwise false.
|
||||
*/
|
||||
bool Verify(const ADSP::CommandListProcessor& processor) override;
|
||||
bool Verify(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/// Input mix buffer index
|
||||
s16 input;
|
||||
|
@ -63,4 +64,4 @@ struct AuxCommand : ICommand {
|
|||
bool effect_enabled;
|
||||
};
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include "audio_core/renderer/adsp/command_list_processor.h"
|
||||
#include "audio_core/adsp/apps/audio_renderer/command_list_processor.h"
|
||||
#include "audio_core/renderer/command/effect/biquad_filter.h"
|
||||
#include "audio_core/renderer/voice/voice_state.h"
|
||||
#include "common/bit_cast.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace AudioCore::Renderer {
|
||||
/**
|
||||
* Biquad filter float implementation.
|
||||
*
|
||||
|
@ -76,14 +76,14 @@ static void ApplyBiquadFilterInt(std::span<s32> output, std::span<const s32> inp
|
|||
}
|
||||
}
|
||||
|
||||
void BiquadFilterCommand::Dump([[maybe_unused]] const ADSP::CommandListProcessor& processor,
|
||||
std::string& string) {
|
||||
void BiquadFilterCommand::Dump(
|
||||
[[maybe_unused]] const AudioRenderer::CommandListProcessor& processor, std::string& string) {
|
||||
string += fmt::format(
|
||||
"BiquadFilterCommand\n\tinput {:02X} output {:02X} needs_init {} use_float_processing {}\n",
|
||||
input, output, needs_init, use_float_processing);
|
||||
}
|
||||
|
||||
void BiquadFilterCommand::Process(const ADSP::CommandListProcessor& processor) {
|
||||
void BiquadFilterCommand::Process(const AudioRenderer::CommandListProcessor& processor) {
|
||||
auto state_{reinterpret_cast<VoiceState::BiquadFilterState*>(state)};
|
||||
if (needs_init) {
|
||||
*state_ = {};
|
||||
|
@ -103,8 +103,8 @@ void BiquadFilterCommand::Process(const ADSP::CommandListProcessor& processor) {
|
|||
}
|
||||
}
|
||||
|
||||
bool BiquadFilterCommand::Verify(const ADSP::CommandListProcessor& processor) {
|
||||
bool BiquadFilterCommand::Verify(const AudioRenderer::CommandListProcessor& processor) {
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -10,11 +10,12 @@
|
|||
#include "audio_core/renderer/voice/voice_state.h"
|
||||
#include "common/common_types.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace ADSP {
|
||||
namespace AudioCore::ADSP::AudioRenderer {
|
||||
class CommandListProcessor;
|
||||
}
|
||||
|
||||
namespace AudioCore::Renderer {
|
||||
|
||||
/**
|
||||
* AudioRenderer command for applying a biquad filter to the input mix buffer, saving the results to
|
||||
* the output mix buffer.
|
||||
|
@ -26,14 +27,14 @@ struct BiquadFilterCommand : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @param string - The string to print into.
|
||||
*/
|
||||
void Dump(const ADSP::CommandListProcessor& processor, std::string& string) override;
|
||||
void Dump(const AudioRenderer::CommandListProcessor& processor, std::string& string) override;
|
||||
|
||||
/**
|
||||
* Process this command.
|
||||
*
|
||||
* @param processor - The CommandListProcessor processing this command.
|
||||
*/
|
||||
void Process(const ADSP::CommandListProcessor& processor) override;
|
||||
void Process(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/**
|
||||
* Verify this command's data is valid.
|
||||
|
@ -41,7 +42,7 @@ struct BiquadFilterCommand : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @return True if the command is valid, otherwise false.
|
||||
*/
|
||||
bool Verify(const ADSP::CommandListProcessor& processor) override;
|
||||
bool Verify(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/// Input mix buffer index
|
||||
s16 input;
|
||||
|
@ -71,4 +72,4 @@ void ApplyBiquadFilterFloat(std::span<s32> output, std::span<const s32> input,
|
|||
std::array<s16, 3>& b, std::array<s16, 2>& a,
|
||||
VoiceState::BiquadFilterState& state, const u32 sample_count);
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include "audio_core/renderer/adsp/command_list_processor.h"
|
||||
#include "audio_core/adsp/apps/audio_renderer/command_list_processor.h"
|
||||
#include "audio_core/renderer/command/effect/capture.h"
|
||||
#include "audio_core/renderer/effect/aux_.h"
|
||||
#include "core/memory.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace AudioCore::Renderer {
|
||||
/**
|
||||
* Reset an AuxBuffer.
|
||||
*
|
||||
|
@ -118,13 +118,13 @@ static u32 WriteAuxBufferDsp(Core::Memory::Memory& memory, const CpuAddr send_in
|
|||
return write_count_;
|
||||
}
|
||||
|
||||
void CaptureCommand::Dump([[maybe_unused]] const ADSP::CommandListProcessor& processor,
|
||||
void CaptureCommand::Dump([[maybe_unused]] const AudioRenderer::CommandListProcessor& processor,
|
||||
std::string& string) {
|
||||
string += fmt::format("CaptureCommand\n\tenabled {} input {:02X} output {:02X}", effect_enabled,
|
||||
input, output);
|
||||
}
|
||||
|
||||
void CaptureCommand::Process(const ADSP::CommandListProcessor& processor) {
|
||||
void CaptureCommand::Process(const AudioRenderer::CommandListProcessor& processor) {
|
||||
if (effect_enabled) {
|
||||
auto input_buffer{
|
||||
processor.mix_buffers.subspan(input * processor.sample_count, processor.sample_count)};
|
||||
|
@ -135,8 +135,8 @@ void CaptureCommand::Process(const ADSP::CommandListProcessor& processor) {
|
|||
}
|
||||
}
|
||||
|
||||
bool CaptureCommand::Verify(const ADSP::CommandListProcessor& processor) {
|
||||
bool CaptureCommand::Verify(const AudioRenderer::CommandListProcessor& processor) {
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -8,11 +8,12 @@
|
|||
#include "audio_core/renderer/command/icommand.h"
|
||||
#include "common/common_types.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace ADSP {
|
||||
namespace AudioCore::ADSP::AudioRenderer {
|
||||
class CommandListProcessor;
|
||||
}
|
||||
|
||||
namespace AudioCore::Renderer {
|
||||
|
||||
/**
|
||||
* AudioRenderer command for capturing a mix buffer. That is, writing it back to a given game memory
|
||||
* address.
|
||||
|
@ -24,14 +25,14 @@ struct CaptureCommand : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @param string - The string to print into.
|
||||
*/
|
||||
void Dump(const ADSP::CommandListProcessor& processor, std::string& string) override;
|
||||
void Dump(const AudioRenderer::CommandListProcessor& processor, std::string& string) override;
|
||||
|
||||
/**
|
||||
* Process this command.
|
||||
*
|
||||
* @param processor - The CommandListProcessor processing this command.
|
||||
*/
|
||||
void Process(const ADSP::CommandListProcessor& processor) override;
|
||||
void Process(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/**
|
||||
* Verify this command's data is valid.
|
||||
|
@ -39,7 +40,7 @@ struct CaptureCommand : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @return True if the command is valid, otherwise false.
|
||||
*/
|
||||
bool Verify(const ADSP::CommandListProcessor& processor) override;
|
||||
bool Verify(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/// Input mix buffer index
|
||||
s16 input;
|
||||
|
@ -59,4 +60,4 @@ struct CaptureCommand : ICommand {
|
|||
bool effect_enabled;
|
||||
};
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -5,11 +5,11 @@
|
|||
#include <span>
|
||||
#include <vector>
|
||||
|
||||
#include "audio_core/renderer/adsp/command_list_processor.h"
|
||||
#include "audio_core/adsp/apps/audio_renderer/command_list_processor.h"
|
||||
#include "audio_core/renderer/command/effect/compressor.h"
|
||||
#include "audio_core/renderer/effect/compressor.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace AudioCore::Renderer {
|
||||
|
||||
static void SetCompressorEffectParameter(const CompressorInfo::ParameterVersion2& params,
|
||||
CompressorInfo::State& state) {
|
||||
|
@ -110,7 +110,7 @@ static void ApplyCompressorEffect(const CompressorInfo::ParameterVersion2& param
|
|||
}
|
||||
}
|
||||
|
||||
void CompressorCommand::Dump([[maybe_unused]] const ADSP::CommandListProcessor& processor,
|
||||
void CompressorCommand::Dump([[maybe_unused]] const AudioRenderer::CommandListProcessor& processor,
|
||||
std::string& string) {
|
||||
string += fmt::format("CompressorCommand\n\tenabled {} \n\tinputs: ", effect_enabled);
|
||||
for (s16 i = 0; i < parameter.channel_count; i++) {
|
||||
|
@ -123,7 +123,7 @@ void CompressorCommand::Dump([[maybe_unused]] const ADSP::CommandListProcessor&
|
|||
string += "\n";
|
||||
}
|
||||
|
||||
void CompressorCommand::Process(const ADSP::CommandListProcessor& processor) {
|
||||
void CompressorCommand::Process(const AudioRenderer::CommandListProcessor& processor) {
|
||||
std::array<std::span<const s32>, MaxChannels> input_buffers{};
|
||||
std::array<std::span<s32>, MaxChannels> output_buffers{};
|
||||
|
||||
|
@ -148,8 +148,8 @@ void CompressorCommand::Process(const ADSP::CommandListProcessor& processor) {
|
|||
processor.sample_count);
|
||||
}
|
||||
|
||||
bool CompressorCommand::Verify(const ADSP::CommandListProcessor& processor) {
|
||||
bool CompressorCommand::Verify(const AudioRenderer::CommandListProcessor& processor) {
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -10,11 +10,12 @@
|
|||
#include "audio_core/renderer/effect/compressor.h"
|
||||
#include "common/common_types.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace ADSP {
|
||||
namespace AudioCore::ADSP::AudioRenderer {
|
||||
class CommandListProcessor;
|
||||
}
|
||||
|
||||
namespace AudioCore::Renderer {
|
||||
|
||||
/**
|
||||
* AudioRenderer command for limiting volume between a high and low threshold.
|
||||
* Version 1.
|
||||
|
@ -26,14 +27,14 @@ struct CompressorCommand : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @param string - The string to print into.
|
||||
*/
|
||||
void Dump(const ADSP::CommandListProcessor& processor, std::string& string) override;
|
||||
void Dump(const AudioRenderer::CommandListProcessor& processor, std::string& string) override;
|
||||
|
||||
/**
|
||||
* Process this command.
|
||||
*
|
||||
* @param processor - The CommandListProcessor processing this command.
|
||||
*/
|
||||
void Process(const ADSP::CommandListProcessor& processor) override;
|
||||
void Process(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/**
|
||||
* Verify this command's data is valid.
|
||||
|
@ -41,7 +42,7 @@ struct CompressorCommand : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @return True if the command is valid, otherwise false.
|
||||
*/
|
||||
bool Verify(const ADSP::CommandListProcessor& processor) override;
|
||||
bool Verify(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/// Input mix buffer offsets for each channel
|
||||
std::array<s16, MaxChannels> inputs;
|
||||
|
@ -57,4 +58,4 @@ struct CompressorCommand : ICommand {
|
|||
bool effect_enabled;
|
||||
};
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include "audio_core/renderer/adsp/command_list_processor.h"
|
||||
#include "audio_core/adsp/apps/audio_renderer/command_list_processor.h"
|
||||
#include "audio_core/renderer/command/effect/delay.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace AudioCore::Renderer {
|
||||
/**
|
||||
* Update the DelayInfo state according to the given parameters.
|
||||
*
|
||||
|
@ -194,7 +194,7 @@ static void ApplyDelayEffect(const DelayInfo::ParameterVersion1& params, DelayIn
|
|||
}
|
||||
}
|
||||
|
||||
void DelayCommand::Dump([[maybe_unused]] const ADSP::CommandListProcessor& processor,
|
||||
void DelayCommand::Dump([[maybe_unused]] const AudioRenderer::CommandListProcessor& processor,
|
||||
std::string& string) {
|
||||
string += fmt::format("DelayCommand\n\tenabled {} \n\tinputs: ", effect_enabled);
|
||||
for (u32 i = 0; i < MaxChannels; i++) {
|
||||
|
@ -207,7 +207,7 @@ void DelayCommand::Dump([[maybe_unused]] const ADSP::CommandListProcessor& proce
|
|||
string += "\n";
|
||||
}
|
||||
|
||||
void DelayCommand::Process(const ADSP::CommandListProcessor& processor) {
|
||||
void DelayCommand::Process(const AudioRenderer::CommandListProcessor& processor) {
|
||||
std::array<std::span<const s32>, MaxChannels> input_buffers{};
|
||||
std::array<std::span<s32>, MaxChannels> output_buffers{};
|
||||
|
||||
|
@ -231,8 +231,8 @@ void DelayCommand::Process(const ADSP::CommandListProcessor& processor) {
|
|||
processor.sample_count);
|
||||
}
|
||||
|
||||
bool DelayCommand::Verify(const ADSP::CommandListProcessor& processor) {
|
||||
bool DelayCommand::Verify(const AudioRenderer::CommandListProcessor& processor) {
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -10,11 +10,12 @@
|
|||
#include "audio_core/renderer/effect/delay.h"
|
||||
#include "common/common_types.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace ADSP {
|
||||
namespace AudioCore::ADSP::AudioRenderer {
|
||||
class CommandListProcessor;
|
||||
}
|
||||
|
||||
namespace AudioCore::Renderer {
|
||||
|
||||
/**
|
||||
* AudioRenderer command for a delay effect. Delays inputs mix buffers according to the parameters
|
||||
* and state, outputs receives the delayed samples.
|
||||
|
@ -26,14 +27,14 @@ struct DelayCommand : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @param string - The string to print into.
|
||||
*/
|
||||
void Dump(const ADSP::CommandListProcessor& processor, std::string& string) override;
|
||||
void Dump(const AudioRenderer::CommandListProcessor& processor, std::string& string) override;
|
||||
|
||||
/**
|
||||
* Process this command.
|
||||
*
|
||||
* @param processor - The CommandListProcessor processing this command.
|
||||
*/
|
||||
void Process(const ADSP::CommandListProcessor& processor) override;
|
||||
void Process(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/**
|
||||
* Verify this command's data is valid.
|
||||
|
@ -41,7 +42,7 @@ struct DelayCommand : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @return True if the command is valid, otherwise false.
|
||||
*/
|
||||
bool Verify(const ADSP::CommandListProcessor& processor) override;
|
||||
bool Verify(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/// Input mix buffer offsets for each channel
|
||||
std::array<s16, MaxChannels> inputs;
|
||||
|
@ -57,4 +58,4 @@ struct DelayCommand : ICommand {
|
|||
bool effect_enabled;
|
||||
};
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -3,11 +3,11 @@
|
|||
|
||||
#include <numbers>
|
||||
|
||||
#include "audio_core/renderer/adsp/command_list_processor.h"
|
||||
#include "audio_core/adsp/apps/audio_renderer/command_list_processor.h"
|
||||
#include "audio_core/renderer/command/effect/i3dl2_reverb.h"
|
||||
#include "common/polyfill_ranges.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace AudioCore::Renderer {
|
||||
|
||||
constexpr std::array<f32, I3dl2ReverbInfo::MaxDelayLines> MinDelayLineTimes{
|
||||
5.0f,
|
||||
|
@ -394,7 +394,7 @@ static void ApplyI3dl2ReverbEffect(const I3dl2ReverbInfo::ParameterVersion1& par
|
|||
}
|
||||
}
|
||||
|
||||
void I3dl2ReverbCommand::Dump([[maybe_unused]] const ADSP::CommandListProcessor& processor,
|
||||
void I3dl2ReverbCommand::Dump([[maybe_unused]] const AudioRenderer::CommandListProcessor& processor,
|
||||
std::string& string) {
|
||||
string += fmt::format("I3dl2ReverbCommand\n\tenabled {} \n\tinputs: ", effect_enabled);
|
||||
for (u32 i = 0; i < parameter.channel_count; i++) {
|
||||
|
@ -407,7 +407,7 @@ void I3dl2ReverbCommand::Dump([[maybe_unused]] const ADSP::CommandListProcessor&
|
|||
string += "\n";
|
||||
}
|
||||
|
||||
void I3dl2ReverbCommand::Process(const ADSP::CommandListProcessor& processor) {
|
||||
void I3dl2ReverbCommand::Process(const AudioRenderer::CommandListProcessor& processor) {
|
||||
std::array<std::span<const s32>, MaxChannels> input_buffers{};
|
||||
std::array<std::span<s32>, MaxChannels> output_buffers{};
|
||||
|
||||
|
@ -431,8 +431,8 @@ void I3dl2ReverbCommand::Process(const ADSP::CommandListProcessor& processor) {
|
|||
processor.sample_count);
|
||||
}
|
||||
|
||||
bool I3dl2ReverbCommand::Verify(const ADSP::CommandListProcessor& processor) {
|
||||
bool I3dl2ReverbCommand::Verify(const AudioRenderer::CommandListProcessor& processor) {
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -10,11 +10,12 @@
|
|||
#include "audio_core/renderer/effect/i3dl2.h"
|
||||
#include "common/common_types.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace ADSP {
|
||||
namespace AudioCore::ADSP::AudioRenderer {
|
||||
class CommandListProcessor;
|
||||
}
|
||||
|
||||
namespace AudioCore::Renderer {
|
||||
|
||||
/**
|
||||
* AudioRenderer command for a I3DL2Reverb effect. Apply a reverb to inputs mix buffer according to
|
||||
* the I3DL2 spec, outputs receives the results.
|
||||
|
@ -26,14 +27,14 @@ struct I3dl2ReverbCommand : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @param string - The string to print into.
|
||||
*/
|
||||
void Dump(const ADSP::CommandListProcessor& processor, std::string& string) override;
|
||||
void Dump(const AudioRenderer::CommandListProcessor& processor, std::string& string) override;
|
||||
|
||||
/**
|
||||
* Process this command.
|
||||
*
|
||||
* @param processor - The CommandListProcessor processing this command.
|
||||
*/
|
||||
void Process(const ADSP::CommandListProcessor& processor) override;
|
||||
void Process(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/**
|
||||
* Verify this command's data is valid.
|
||||
|
@ -41,7 +42,7 @@ struct I3dl2ReverbCommand : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @return True if the command is valid, otherwise false.
|
||||
*/
|
||||
bool Verify(const ADSP::CommandListProcessor& processor) override;
|
||||
bool Verify(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/// Input mix buffer offsets for each channel
|
||||
std::array<s16, MaxChannels> inputs;
|
||||
|
@ -57,4 +58,4 @@ struct I3dl2ReverbCommand : ICommand {
|
|||
bool effect_enabled;
|
||||
};
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include "audio_core/renderer/adsp/command_list_processor.h"
|
||||
#include "audio_core/adsp/apps/audio_renderer/command_list_processor.h"
|
||||
#include "audio_core/renderer/command/effect/light_limiter.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace AudioCore::Renderer {
|
||||
/**
|
||||
* Update the LightLimiterInfo state according to the given parameters.
|
||||
* A no-op.
|
||||
|
@ -133,8 +133,8 @@ static void ApplyLightLimiterEffect(const LightLimiterInfo::ParameterVersion2& p
|
|||
}
|
||||
}
|
||||
|
||||
void LightLimiterVersion1Command::Dump([[maybe_unused]] const ADSP::CommandListProcessor& processor,
|
||||
std::string& string) {
|
||||
void LightLimiterVersion1Command::Dump(
|
||||
[[maybe_unused]] const AudioRenderer::CommandListProcessor& processor, std::string& string) {
|
||||
string += fmt::format("LightLimiterVersion1Command\n\tinputs: ");
|
||||
for (u32 i = 0; i < MaxChannels; i++) {
|
||||
string += fmt::format("{:02X}, ", inputs[i]);
|
||||
|
@ -146,7 +146,7 @@ void LightLimiterVersion1Command::Dump([[maybe_unused]] const ADSP::CommandListP
|
|||
string += "\n";
|
||||
}
|
||||
|
||||
void LightLimiterVersion1Command::Process(const ADSP::CommandListProcessor& processor) {
|
||||
void LightLimiterVersion1Command::Process(const AudioRenderer::CommandListProcessor& processor) {
|
||||
std::array<std::span<const s32>, MaxChannels> input_buffers{};
|
||||
std::array<std::span<s32>, MaxChannels> output_buffers{};
|
||||
|
||||
|
@ -172,12 +172,12 @@ void LightLimiterVersion1Command::Process(const ADSP::CommandListProcessor& proc
|
|||
processor.sample_count, statistics);
|
||||
}
|
||||
|
||||
bool LightLimiterVersion1Command::Verify(const ADSP::CommandListProcessor& processor) {
|
||||
bool LightLimiterVersion1Command::Verify(const AudioRenderer::CommandListProcessor& processor) {
|
||||
return true;
|
||||
}
|
||||
|
||||
void LightLimiterVersion2Command::Dump([[maybe_unused]] const ADSP::CommandListProcessor& processor,
|
||||
std::string& string) {
|
||||
void LightLimiterVersion2Command::Dump(
|
||||
[[maybe_unused]] const AudioRenderer::CommandListProcessor& processor, std::string& string) {
|
||||
string += fmt::format("LightLimiterVersion2Command\n\tinputs: \n");
|
||||
for (u32 i = 0; i < MaxChannels; i++) {
|
||||
string += fmt::format("{:02X}, ", inputs[i]);
|
||||
|
@ -189,7 +189,7 @@ void LightLimiterVersion2Command::Dump([[maybe_unused]] const ADSP::CommandListP
|
|||
string += "\n";
|
||||
}
|
||||
|
||||
void LightLimiterVersion2Command::Process(const ADSP::CommandListProcessor& processor) {
|
||||
void LightLimiterVersion2Command::Process(const AudioRenderer::CommandListProcessor& processor) {
|
||||
std::array<std::span<const s32>, MaxChannels> input_buffers{};
|
||||
std::array<std::span<s32>, MaxChannels> output_buffers{};
|
||||
|
||||
|
@ -215,8 +215,8 @@ void LightLimiterVersion2Command::Process(const ADSP::CommandListProcessor& proc
|
|||
processor.sample_count, statistics);
|
||||
}
|
||||
|
||||
bool LightLimiterVersion2Command::Verify(const ADSP::CommandListProcessor& processor) {
|
||||
bool LightLimiterVersion2Command::Verify(const AudioRenderer::CommandListProcessor& processor) {
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -10,11 +10,12 @@
|
|||
#include "audio_core/renderer/effect/light_limiter.h"
|
||||
#include "common/common_types.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace ADSP {
|
||||
namespace AudioCore::ADSP::AudioRenderer {
|
||||
class CommandListProcessor;
|
||||
}
|
||||
|
||||
namespace AudioCore::Renderer {
|
||||
|
||||
/**
|
||||
* AudioRenderer command for limiting volume between a high and low threshold.
|
||||
* Version 1.
|
||||
|
@ -26,14 +27,14 @@ struct LightLimiterVersion1Command : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @param string - The string to print into.
|
||||
*/
|
||||
void Dump(const ADSP::CommandListProcessor& processor, std::string& string) override;
|
||||
void Dump(const AudioRenderer::CommandListProcessor& processor, std::string& string) override;
|
||||
|
||||
/**
|
||||
* Process this command.
|
||||
*
|
||||
* @param processor - The CommandListProcessor processing this command.
|
||||
*/
|
||||
void Process(const ADSP::CommandListProcessor& processor) override;
|
||||
void Process(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/**
|
||||
* Verify this command's data is valid.
|
||||
|
@ -41,7 +42,7 @@ struct LightLimiterVersion1Command : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @return True if the command is valid, otherwise false.
|
||||
*/
|
||||
bool Verify(const ADSP::CommandListProcessor& processor) override;
|
||||
bool Verify(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/// Input mix buffer offsets for each channel
|
||||
std::array<s16, MaxChannels> inputs;
|
||||
|
@ -68,21 +69,21 @@ struct LightLimiterVersion2Command : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @param string - The string to print into.
|
||||
*/
|
||||
void Dump(const ADSP::CommandListProcessor& processor, std::string& string) override;
|
||||
void Dump(const AudioRenderer::CommandListProcessor& processor, std::string& string) override;
|
||||
|
||||
/**
|
||||
* Process this command.
|
||||
*
|
||||
* @param processor - The CommandListProcessor processing this command.
|
||||
*/
|
||||
void Process(const ADSP::CommandListProcessor& processor) override;
|
||||
void Process(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/**
|
||||
* Verify this command's data is valid.
|
||||
*
|
||||
* @param processor - The CommandListProcessor processing this command.
|
||||
*/
|
||||
bool Verify(const ADSP::CommandListProcessor& processor) override;
|
||||
bool Verify(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/// Input mix buffer offsets for each channel
|
||||
std::array<s16, MaxChannels> inputs;
|
||||
|
@ -100,4 +101,4 @@ struct LightLimiterVersion2Command : ICommand {
|
|||
bool effect_enabled;
|
||||
};
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -1,20 +1,20 @@
|
|||
// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include "audio_core/renderer/adsp/command_list_processor.h"
|
||||
#include "audio_core/adsp/apps/audio_renderer/command_list_processor.h"
|
||||
#include "audio_core/renderer/command/effect/biquad_filter.h"
|
||||
#include "audio_core/renderer/command/effect/multi_tap_biquad_filter.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace AudioCore::Renderer {
|
||||
|
||||
void MultiTapBiquadFilterCommand::Dump([[maybe_unused]] const ADSP::CommandListProcessor& processor,
|
||||
std::string& string) {
|
||||
void MultiTapBiquadFilterCommand::Dump(
|
||||
[[maybe_unused]] const AudioRenderer::CommandListProcessor& processor, std::string& string) {
|
||||
string += fmt::format(
|
||||
"MultiTapBiquadFilterCommand\n\tinput {:02X}\n\toutput {:02X}\n\tneeds_init ({}, {})\n",
|
||||
input, output, needs_init[0], needs_init[1]);
|
||||
}
|
||||
|
||||
void MultiTapBiquadFilterCommand::Process(const ADSP::CommandListProcessor& processor) {
|
||||
void MultiTapBiquadFilterCommand::Process(const AudioRenderer::CommandListProcessor& processor) {
|
||||
if (filter_tap_count > MaxBiquadFilters) {
|
||||
LOG_ERROR(Service_Audio, "Too many filter taps! {}", filter_tap_count);
|
||||
filter_tap_count = MaxBiquadFilters;
|
||||
|
@ -38,8 +38,8 @@ void MultiTapBiquadFilterCommand::Process(const ADSP::CommandListProcessor& proc
|
|||
}
|
||||
}
|
||||
|
||||
bool MultiTapBiquadFilterCommand::Verify(const ADSP::CommandListProcessor& processor) {
|
||||
bool MultiTapBiquadFilterCommand::Verify(const AudioRenderer::CommandListProcessor& processor) {
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -10,11 +10,12 @@
|
|||
#include "audio_core/renderer/voice/voice_info.h"
|
||||
#include "common/common_types.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace ADSP {
|
||||
namespace AudioCore::ADSP::AudioRenderer {
|
||||
class CommandListProcessor;
|
||||
}
|
||||
|
||||
namespace AudioCore::Renderer {
|
||||
|
||||
/**
|
||||
* AudioRenderer command for applying multiple biquads at once.
|
||||
*/
|
||||
|
@ -25,14 +26,14 @@ struct MultiTapBiquadFilterCommand : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @param string - The string to print into.
|
||||
*/
|
||||
void Dump(const ADSP::CommandListProcessor& processor, std::string& string) override;
|
||||
void Dump(const AudioRenderer::CommandListProcessor& processor, std::string& string) override;
|
||||
|
||||
/**
|
||||
* Process this command.
|
||||
*
|
||||
* @param processor - The CommandListProcessor processing this command.
|
||||
*/
|
||||
void Process(const ADSP::CommandListProcessor& processor) override;
|
||||
void Process(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/**
|
||||
* Verify this command's data is valid.
|
||||
|
@ -40,7 +41,7 @@ struct MultiTapBiquadFilterCommand : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @return True if the command is valid, otherwise false.
|
||||
*/
|
||||
bool Verify(const ADSP::CommandListProcessor& processor) override;
|
||||
bool Verify(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/// Input mix buffer index
|
||||
s16 input;
|
||||
|
@ -56,4 +57,4 @@ struct MultiTapBiquadFilterCommand : ICommand {
|
|||
u8 filter_tap_count;
|
||||
};
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -4,11 +4,11 @@
|
|||
#include <numbers>
|
||||
#include <ranges>
|
||||
|
||||
#include "audio_core/renderer/adsp/command_list_processor.h"
|
||||
#include "audio_core/adsp/apps/audio_renderer/command_list_processor.h"
|
||||
#include "audio_core/renderer/command/effect/reverb.h"
|
||||
#include "common/polyfill_ranges.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace AudioCore::Renderer {
|
||||
|
||||
constexpr std::array<f32, ReverbInfo::MaxDelayLines> FdnMaxDelayLineTimes = {
|
||||
53.9532470703125f,
|
||||
|
@ -396,7 +396,7 @@ static void ApplyReverbEffect(const ReverbInfo::ParameterVersion2& params, Rever
|
|||
}
|
||||
}
|
||||
|
||||
void ReverbCommand::Dump([[maybe_unused]] const ADSP::CommandListProcessor& processor,
|
||||
void ReverbCommand::Dump([[maybe_unused]] const AudioRenderer::CommandListProcessor& processor,
|
||||
std::string& string) {
|
||||
string += fmt::format(
|
||||
"ReverbCommand\n\tenabled {} long_size_pre_delay_supported {}\n\tinputs: ", effect_enabled,
|
||||
|
@ -411,7 +411,7 @@ void ReverbCommand::Dump([[maybe_unused]] const ADSP::CommandListProcessor& proc
|
|||
string += "\n";
|
||||
}
|
||||
|
||||
void ReverbCommand::Process(const ADSP::CommandListProcessor& processor) {
|
||||
void ReverbCommand::Process(const AudioRenderer::CommandListProcessor& processor) {
|
||||
std::array<std::span<const s32>, MaxChannels> input_buffers{};
|
||||
std::array<std::span<s32>, MaxChannels> output_buffers{};
|
||||
|
||||
|
@ -435,8 +435,8 @@ void ReverbCommand::Process(const ADSP::CommandListProcessor& processor) {
|
|||
processor.sample_count);
|
||||
}
|
||||
|
||||
bool ReverbCommand::Verify(const ADSP::CommandListProcessor& processor) {
|
||||
bool ReverbCommand::Verify(const AudioRenderer::CommandListProcessor& processor) {
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -10,11 +10,12 @@
|
|||
#include "audio_core/renderer/effect/reverb.h"
|
||||
#include "common/common_types.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace ADSP {
|
||||
namespace AudioCore::ADSP::AudioRenderer {
|
||||
class CommandListProcessor;
|
||||
}
|
||||
|
||||
namespace AudioCore::Renderer {
|
||||
|
||||
/**
|
||||
* AudioRenderer command for a Reverb effect. Apply a reverb to inputs mix buffer, outputs receives
|
||||
* the results.
|
||||
|
@ -26,14 +27,14 @@ struct ReverbCommand : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @param string - The string to print into.
|
||||
*/
|
||||
void Dump(const ADSP::CommandListProcessor& processor, std::string& string) override;
|
||||
void Dump(const AudioRenderer::CommandListProcessor& processor, std::string& string) override;
|
||||
|
||||
/**
|
||||
* Process this command.
|
||||
*
|
||||
* @param processor - The CommandListProcessor processing this command.
|
||||
*/
|
||||
void Process(const ADSP::CommandListProcessor& processor) override;
|
||||
void Process(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/**
|
||||
* Verify this command's data is valid.
|
||||
|
@ -41,7 +42,7 @@ struct ReverbCommand : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @return True if the command is valid, otherwise false.
|
||||
*/
|
||||
bool Verify(const ADSP::CommandListProcessor& processor) override;
|
||||
bool Verify(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/// Input mix buffer offsets for each channel
|
||||
std::array<s16, MaxChannels> inputs;
|
||||
|
@ -59,4 +60,4 @@ struct ReverbCommand : ICommand {
|
|||
bool long_size_pre_delay_supported;
|
||||
};
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -3,14 +3,18 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
|
||||
#include "audio_core/common/common.h"
|
||||
#include "common/common_types.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace ADSP {
|
||||
namespace AudioCore::ADSP::AudioRenderer {
|
||||
class CommandListProcessor;
|
||||
}
|
||||
|
||||
namespace AudioCore::Renderer {
|
||||
using namespace ::AudioCore::ADSP;
|
||||
|
||||
enum class CommandId : u8 {
|
||||
/* 0x00 */ Invalid,
|
||||
/* 0x01 */ DataSourcePcmInt16Version1,
|
||||
|
@ -59,14 +63,15 @@ struct ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @param string - The string to print into.
|
||||
*/
|
||||
virtual void Dump(const ADSP::CommandListProcessor& processor, std::string& string) = 0;
|
||||
virtual void Dump(const AudioRenderer::CommandListProcessor& processor,
|
||||
std::string& string) = 0;
|
||||
|
||||
/**
|
||||
* Process this command.
|
||||
*
|
||||
* @param processor - The CommandListProcessor processing this command.
|
||||
*/
|
||||
virtual void Process(const ADSP::CommandListProcessor& processor) = 0;
|
||||
virtual void Process(const AudioRenderer::CommandListProcessor& processor) = 0;
|
||||
|
||||
/**
|
||||
* Verify this command's data is valid.
|
||||
|
@ -74,7 +79,7 @@ struct ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @return True if the command is valid, otherwise false.
|
||||
*/
|
||||
virtual bool Verify(const ADSP::CommandListProcessor& processor) = 0;
|
||||
virtual bool Verify(const AudioRenderer::CommandListProcessor& processor) = 0;
|
||||
|
||||
/// Command magic 0xCAFEBABE
|
||||
u32 magic{};
|
||||
|
@ -90,4 +95,4 @@ struct ICommand {
|
|||
u32 node_id{};
|
||||
};
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -3,22 +3,22 @@
|
|||
|
||||
#include <string>
|
||||
|
||||
#include "audio_core/renderer/adsp/command_list_processor.h"
|
||||
#include "audio_core/adsp/apps/audio_renderer/command_list_processor.h"
|
||||
#include "audio_core/renderer/command/mix/clear_mix.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace AudioCore::Renderer {
|
||||
|
||||
void ClearMixBufferCommand::Dump([[maybe_unused]] const ADSP::CommandListProcessor& processor,
|
||||
std::string& string) {
|
||||
void ClearMixBufferCommand::Dump(
|
||||
[[maybe_unused]] const AudioRenderer::CommandListProcessor& processor, std::string& string) {
|
||||
string += fmt::format("ClearMixBufferCommand\n");
|
||||
}
|
||||
|
||||
void ClearMixBufferCommand::Process(const ADSP::CommandListProcessor& processor) {
|
||||
void ClearMixBufferCommand::Process(const AudioRenderer::CommandListProcessor& processor) {
|
||||
memset(processor.mix_buffers.data(), 0, processor.mix_buffers.size_bytes());
|
||||
}
|
||||
|
||||
bool ClearMixBufferCommand::Verify(const ADSP::CommandListProcessor& processor) {
|
||||
bool ClearMixBufferCommand::Verify(const AudioRenderer::CommandListProcessor& processor) {
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -8,11 +8,12 @@
|
|||
#include "audio_core/renderer/command/icommand.h"
|
||||
#include "common/common_types.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace ADSP {
|
||||
namespace AudioCore::ADSP::AudioRenderer {
|
||||
class CommandListProcessor;
|
||||
}
|
||||
|
||||
namespace AudioCore::Renderer {
|
||||
|
||||
/**
|
||||
* AudioRenderer command for a clearing the mix buffers.
|
||||
* Used at the start of each command list.
|
||||
|
@ -24,14 +25,14 @@ struct ClearMixBufferCommand : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @param string - The string to print into.
|
||||
*/
|
||||
void Dump(const ADSP::CommandListProcessor& processor, std::string& string) override;
|
||||
void Dump(const AudioRenderer::CommandListProcessor& processor, std::string& string) override;
|
||||
|
||||
/**
|
||||
* Process this command.
|
||||
*
|
||||
* @param processor - The CommandListProcessor processing this command.
|
||||
*/
|
||||
void Process(const ADSP::CommandListProcessor& processor) override;
|
||||
void Process(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/**
|
||||
* Verify this command's data is valid.
|
||||
|
@ -39,7 +40,7 @@ struct ClearMixBufferCommand : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @return True if the command is valid, otherwise false.
|
||||
*/
|
||||
bool Verify(const ADSP::CommandListProcessor& processor) override;
|
||||
bool Verify(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
};
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -1,18 +1,18 @@
|
|||
// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include "audio_core/renderer/adsp/command_list_processor.h"
|
||||
#include "audio_core/adsp/apps/audio_renderer/command_list_processor.h"
|
||||
#include "audio_core/renderer/command/mix/copy_mix.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace AudioCore::Renderer {
|
||||
|
||||
void CopyMixBufferCommand::Dump([[maybe_unused]] const ADSP::CommandListProcessor& processor,
|
||||
std::string& string) {
|
||||
void CopyMixBufferCommand::Dump(
|
||||
[[maybe_unused]] const AudioRenderer::CommandListProcessor& processor, std::string& string) {
|
||||
string += fmt::format("CopyMixBufferCommand\n\tinput {:02X} output {:02X}\n", input_index,
|
||||
output_index);
|
||||
}
|
||||
|
||||
void CopyMixBufferCommand::Process(const ADSP::CommandListProcessor& processor) {
|
||||
void CopyMixBufferCommand::Process(const AudioRenderer::CommandListProcessor& processor) {
|
||||
auto output{processor.mix_buffers.subspan(output_index * processor.sample_count,
|
||||
processor.sample_count)};
|
||||
auto input{processor.mix_buffers.subspan(input_index * processor.sample_count,
|
||||
|
@ -20,8 +20,8 @@ void CopyMixBufferCommand::Process(const ADSP::CommandListProcessor& processor)
|
|||
std::memcpy(output.data(), input.data(), processor.sample_count * sizeof(s32));
|
||||
}
|
||||
|
||||
bool CopyMixBufferCommand::Verify(const ADSP::CommandListProcessor& processor) {
|
||||
bool CopyMixBufferCommand::Verify(const AudioRenderer::CommandListProcessor& processor) {
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -8,11 +8,12 @@
|
|||
#include "audio_core/renderer/command/icommand.h"
|
||||
#include "common/common_types.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace ADSP {
|
||||
namespace AudioCore::ADSP::AudioRenderer {
|
||||
class CommandListProcessor;
|
||||
}
|
||||
|
||||
namespace AudioCore::Renderer {
|
||||
|
||||
/**
|
||||
* AudioRenderer command for a copying a mix buffer from input to output.
|
||||
*/
|
||||
|
@ -23,14 +24,14 @@ struct CopyMixBufferCommand : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @param string - The string to print into.
|
||||
*/
|
||||
void Dump(const ADSP::CommandListProcessor& processor, std::string& string) override;
|
||||
void Dump(const AudioRenderer::CommandListProcessor& processor, std::string& string) override;
|
||||
|
||||
/**
|
||||
* Process this command.
|
||||
*
|
||||
* @param processor - The CommandListProcessor processing this command.
|
||||
*/
|
||||
void Process(const ADSP::CommandListProcessor& processor) override;
|
||||
void Process(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/**
|
||||
* Verify this command's data is valid.
|
||||
|
@ -38,7 +39,7 @@ struct CopyMixBufferCommand : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @return True if the command is valid, otherwise false.
|
||||
*/
|
||||
bool Verify(const ADSP::CommandListProcessor& processor) override;
|
||||
bool Verify(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/// Input mix buffer index
|
||||
s16 input_index;
|
||||
|
@ -46,4 +47,4 @@ struct CopyMixBufferCommand : ICommand {
|
|||
s16 output_index;
|
||||
};
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include "audio_core/adsp/apps/audio_renderer/command_list_processor.h"
|
||||
#include "audio_core/common/common.h"
|
||||
#include "audio_core/renderer/adsp/command_list_processor.h"
|
||||
#include "audio_core/renderer/command/mix/depop_for_mix_buffers.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace AudioCore::Renderer {
|
||||
/**
|
||||
* Apply depopping. Add the depopped sample to each incoming new sample, decaying it each time
|
||||
* according to decay.
|
||||
|
@ -36,13 +36,13 @@ static s32 ApplyDepopMix(std::span<s32> output, const s32 depop_sample,
|
|||
}
|
||||
}
|
||||
|
||||
void DepopForMixBuffersCommand::Dump([[maybe_unused]] const ADSP::CommandListProcessor& processor,
|
||||
std::string& string) {
|
||||
void DepopForMixBuffersCommand::Dump(
|
||||
[[maybe_unused]] const AudioRenderer::CommandListProcessor& processor, std::string& string) {
|
||||
string += fmt::format("DepopForMixBuffersCommand\n\tinput {:02X} count {} decay {}\n", input,
|
||||
count, decay.to_float());
|
||||
}
|
||||
|
||||
void DepopForMixBuffersCommand::Process(const ADSP::CommandListProcessor& processor) {
|
||||
void DepopForMixBuffersCommand::Process(const AudioRenderer::CommandListProcessor& processor) {
|
||||
auto end_index{std::min(processor.buffer_count, input + count)};
|
||||
std::span<s32> depop_buff{reinterpret_cast<s32*>(depop_buffer), end_index};
|
||||
|
||||
|
@ -57,8 +57,8 @@ void DepopForMixBuffersCommand::Process(const ADSP::CommandListProcessor& proces
|
|||
}
|
||||
}
|
||||
|
||||
bool DepopForMixBuffersCommand::Verify(const ADSP::CommandListProcessor& processor) {
|
||||
bool DepopForMixBuffersCommand::Verify(const AudioRenderer::CommandListProcessor& processor) {
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -9,11 +9,12 @@
|
|||
#include "common/common_types.h"
|
||||
#include "common/fixed_point.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace ADSP {
|
||||
namespace AudioCore::ADSP::AudioRenderer {
|
||||
class CommandListProcessor;
|
||||
}
|
||||
|
||||
namespace AudioCore::Renderer {
|
||||
|
||||
/**
|
||||
* AudioRenderer command for depopping a mix buffer.
|
||||
* Adds a cumulation of previous samples to the current mix buffer with a decay.
|
||||
|
@ -25,14 +26,14 @@ struct DepopForMixBuffersCommand : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @param string - The string to print into.
|
||||
*/
|
||||
void Dump(const ADSP::CommandListProcessor& processor, std::string& string) override;
|
||||
void Dump(const AudioRenderer::CommandListProcessor& processor, std::string& string) override;
|
||||
|
||||
/**
|
||||
* Process this command.
|
||||
*
|
||||
* @param processor - The CommandListProcessor processing this command.
|
||||
*/
|
||||
void Process(const ADSP::CommandListProcessor& processor) override;
|
||||
void Process(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/**
|
||||
* Verify this command's data is valid.
|
||||
|
@ -40,7 +41,7 @@ struct DepopForMixBuffersCommand : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @return True if the command is valid, otherwise false.
|
||||
*/
|
||||
bool Verify(const ADSP::CommandListProcessor& processor) override;
|
||||
bool Verify(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/// Starting input mix buffer index
|
||||
u32 input;
|
||||
|
@ -52,4 +53,4 @@ struct DepopForMixBuffersCommand : ICommand {
|
|||
CpuAddr depop_buffer;
|
||||
};
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include "audio_core/renderer/adsp/command_list_processor.h"
|
||||
#include "audio_core/adsp/apps/audio_renderer/command_list_processor.h"
|
||||
#include "audio_core/renderer/command/mix/depop_prepare.h"
|
||||
#include "audio_core/renderer/voice/voice_state.h"
|
||||
#include "common/fixed_point.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace AudioCore::Renderer {
|
||||
|
||||
void DepopPrepareCommand::Dump([[maybe_unused]] const ADSP::CommandListProcessor& processor,
|
||||
std::string& string) {
|
||||
void DepopPrepareCommand::Dump(
|
||||
[[maybe_unused]] const AudioRenderer::CommandListProcessor& processor, std::string& string) {
|
||||
string += fmt::format("DepopPrepareCommand\n\tinputs: ");
|
||||
for (u32 i = 0; i < buffer_count; i++) {
|
||||
string += fmt::format("{:02X}, ", inputs[i]);
|
||||
|
@ -17,7 +17,7 @@ void DepopPrepareCommand::Dump([[maybe_unused]] const ADSP::CommandListProcessor
|
|||
string += "\n";
|
||||
}
|
||||
|
||||
void DepopPrepareCommand::Process(const ADSP::CommandListProcessor& processor) {
|
||||
void DepopPrepareCommand::Process(const AudioRenderer::CommandListProcessor& processor) {
|
||||
auto samples{reinterpret_cast<s32*>(previous_samples)};
|
||||
auto buffer{reinterpret_cast<s32*>(depop_buffer)};
|
||||
|
||||
|
@ -29,8 +29,8 @@ void DepopPrepareCommand::Process(const ADSP::CommandListProcessor& processor) {
|
|||
}
|
||||
}
|
||||
|
||||
bool DepopPrepareCommand::Verify(const ADSP::CommandListProcessor& processor) {
|
||||
bool DepopPrepareCommand::Verify(const AudioRenderer::CommandListProcessor& processor) {
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -8,11 +8,12 @@
|
|||
#include "audio_core/renderer/command/icommand.h"
|
||||
#include "common/common_types.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace ADSP {
|
||||
namespace AudioCore::ADSP::AudioRenderer {
|
||||
class CommandListProcessor;
|
||||
}
|
||||
|
||||
namespace AudioCore::Renderer {
|
||||
|
||||
/**
|
||||
* AudioRenderer command for preparing depop.
|
||||
* Adds the previusly output last samples to the depop buffer.
|
||||
|
@ -24,14 +25,14 @@ struct DepopPrepareCommand : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @param string - The string to print into.
|
||||
*/
|
||||
void Dump(const ADSP::CommandListProcessor& processor, std::string& string) override;
|
||||
void Dump(const AudioRenderer::CommandListProcessor& processor, std::string& string) override;
|
||||
|
||||
/**
|
||||
* Process this command.
|
||||
*
|
||||
* @param processor - The CommandListProcessor processing this command.
|
||||
*/
|
||||
void Process(const ADSP::CommandListProcessor& processor) override;
|
||||
void Process(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/**
|
||||
* Verify this command's data is valid.
|
||||
|
@ -39,7 +40,7 @@ struct DepopPrepareCommand : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @return True if the command is valid, otherwise false.
|
||||
*/
|
||||
bool Verify(const ADSP::CommandListProcessor& processor) override;
|
||||
bool Verify(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/// Depop buffer offset for each mix buffer
|
||||
std::array<s16, MaxMixBuffers> inputs;
|
||||
|
@ -51,4 +52,4 @@ struct DepopPrepareCommand : ICommand {
|
|||
CpuAddr depop_buffer;
|
||||
};
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -5,11 +5,11 @@
|
|||
#include <limits>
|
||||
#include <span>
|
||||
|
||||
#include "audio_core/renderer/adsp/command_list_processor.h"
|
||||
#include "audio_core/adsp/apps/audio_renderer/command_list_processor.h"
|
||||
#include "audio_core/renderer/command/mix/mix.h"
|
||||
#include "common/fixed_point.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace AudioCore::Renderer {
|
||||
/**
|
||||
* Mix input mix buffer into output mix buffer, with volume applied to the input.
|
||||
*
|
||||
|
@ -28,7 +28,7 @@ static void ApplyMix(std::span<s32> output, std::span<const s32> input, const f3
|
|||
}
|
||||
}
|
||||
|
||||
void MixCommand::Dump([[maybe_unused]] const ADSP::CommandListProcessor& processor,
|
||||
void MixCommand::Dump([[maybe_unused]] const AudioRenderer::CommandListProcessor& processor,
|
||||
std::string& string) {
|
||||
string += fmt::format("MixCommand");
|
||||
string += fmt::format("\n\tinput {:02X}", input_index);
|
||||
|
@ -37,7 +37,7 @@ void MixCommand::Dump([[maybe_unused]] const ADSP::CommandListProcessor& process
|
|||
string += "\n";
|
||||
}
|
||||
|
||||
void MixCommand::Process(const ADSP::CommandListProcessor& processor) {
|
||||
void MixCommand::Process(const AudioRenderer::CommandListProcessor& processor) {
|
||||
auto output{processor.mix_buffers.subspan(output_index * processor.sample_count,
|
||||
processor.sample_count)};
|
||||
auto input{processor.mix_buffers.subspan(input_index * processor.sample_count,
|
||||
|
@ -63,8 +63,8 @@ void MixCommand::Process(const ADSP::CommandListProcessor& processor) {
|
|||
}
|
||||
}
|
||||
|
||||
bool MixCommand::Verify(const ADSP::CommandListProcessor& processor) {
|
||||
bool MixCommand::Verify(const AudioRenderer::CommandListProcessor& processor) {
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -8,11 +8,12 @@
|
|||
#include "audio_core/renderer/command/icommand.h"
|
||||
#include "common/common_types.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace ADSP {
|
||||
namespace AudioCore::ADSP::AudioRenderer {
|
||||
class CommandListProcessor;
|
||||
}
|
||||
|
||||
namespace AudioCore::Renderer {
|
||||
|
||||
/**
|
||||
* AudioRenderer command for mixing an input mix buffer to an output mix buffer, with a volume
|
||||
* applied to the input.
|
||||
|
@ -24,14 +25,14 @@ struct MixCommand : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @param string - The string to print into.
|
||||
*/
|
||||
void Dump(const ADSP::CommandListProcessor& processor, std::string& string) override;
|
||||
void Dump(const AudioRenderer::CommandListProcessor& processor, std::string& string) override;
|
||||
|
||||
/**
|
||||
* Process this command.
|
||||
*
|
||||
* @param processor - The CommandListProcessor processing this command.
|
||||
*/
|
||||
void Process(const ADSP::CommandListProcessor& processor) override;
|
||||
void Process(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/**
|
||||
* Verify this command's data is valid.
|
||||
|
@ -39,7 +40,7 @@ struct MixCommand : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @return True if the command is valid, otherwise false.
|
||||
*/
|
||||
bool Verify(const ADSP::CommandListProcessor& processor) override;
|
||||
bool Verify(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/// Fixed point precision
|
||||
u8 precision;
|
||||
|
@ -51,4 +52,4 @@ struct MixCommand : ICommand {
|
|||
f32 volume;
|
||||
};
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include "audio_core/renderer/adsp/command_list_processor.h"
|
||||
#include "audio_core/adsp/apps/audio_renderer/command_list_processor.h"
|
||||
#include "audio_core/renderer/command/mix/mix_ramp.h"
|
||||
#include "common/fixed_point.h"
|
||||
#include "common/logging/log.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace AudioCore::Renderer {
|
||||
|
||||
template <size_t Q>
|
||||
s32 ApplyMixRamp(std::span<s32> output, std::span<const s32> input, const f32 volume_,
|
||||
|
@ -33,7 +33,8 @@ s32 ApplyMixRamp(std::span<s32> output, std::span<const s32> input, const f32 vo
|
|||
template s32 ApplyMixRamp<15>(std::span<s32>, std::span<const s32>, f32, f32, u32);
|
||||
template s32 ApplyMixRamp<23>(std::span<s32>, std::span<const s32>, f32, f32, u32);
|
||||
|
||||
void MixRampCommand::Dump(const ADSP::CommandListProcessor& processor, std::string& string) {
|
||||
void MixRampCommand::Dump(const AudioRenderer::CommandListProcessor& processor,
|
||||
std::string& string) {
|
||||
const auto ramp{(volume - prev_volume) / static_cast<f32>(processor.sample_count)};
|
||||
string += fmt::format("MixRampCommand");
|
||||
string += fmt::format("\n\tinput {:02X}", input_index);
|
||||
|
@ -44,7 +45,7 @@ void MixRampCommand::Dump(const ADSP::CommandListProcessor& processor, std::stri
|
|||
string += "\n";
|
||||
}
|
||||
|
||||
void MixRampCommand::Process(const ADSP::CommandListProcessor& processor) {
|
||||
void MixRampCommand::Process(const AudioRenderer::CommandListProcessor& processor) {
|
||||
auto output{processor.mix_buffers.subspan(output_index * processor.sample_count,
|
||||
processor.sample_count)};
|
||||
auto input{processor.mix_buffers.subspan(input_index * processor.sample_count,
|
||||
|
@ -75,8 +76,8 @@ void MixRampCommand::Process(const ADSP::CommandListProcessor& processor) {
|
|||
}
|
||||
}
|
||||
|
||||
bool MixRampCommand::Verify(const ADSP::CommandListProcessor& processor) {
|
||||
bool MixRampCommand::Verify(const AudioRenderer::CommandListProcessor& processor) {
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -9,11 +9,12 @@
|
|||
#include "audio_core/renderer/command/icommand.h"
|
||||
#include "common/common_types.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace ADSP {
|
||||
namespace AudioCore::ADSP::AudioRenderer {
|
||||
class CommandListProcessor;
|
||||
}
|
||||
|
||||
namespace AudioCore::Renderer {
|
||||
|
||||
/**
|
||||
* AudioRenderer command for mixing an input mix buffer to an output mix buffer, with a volume
|
||||
* applied to the input, and volume ramping to smooth out the transition.
|
||||
|
@ -25,14 +26,14 @@ struct MixRampCommand : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @param string - The string to print into.
|
||||
*/
|
||||
void Dump(const ADSP::CommandListProcessor& processor, std::string& string) override;
|
||||
void Dump(const AudioRenderer::CommandListProcessor& processor, std::string& string) override;
|
||||
|
||||
/**
|
||||
* Process this command.
|
||||
*
|
||||
* @param processor - The CommandListProcessor processing this command.
|
||||
*/
|
||||
void Process(const ADSP::CommandListProcessor& processor) override;
|
||||
void Process(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/**
|
||||
* Verify this command's data is valid.
|
||||
|
@ -40,7 +41,7 @@ struct MixRampCommand : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @return True if the command is valid, otherwise false.
|
||||
*/
|
||||
bool Verify(const ADSP::CommandListProcessor& processor) override;
|
||||
bool Verify(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/// Fixed point precision
|
||||
u8 precision;
|
||||
|
@ -70,4 +71,4 @@ template <size_t Q>
|
|||
s32 ApplyMixRamp(std::span<s32> output, std::span<const s32> input, f32 volume_, f32 ramp_,
|
||||
u32 sample_count);
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -1,13 +1,14 @@
|
|||
// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include "audio_core/renderer/adsp/command_list_processor.h"
|
||||
#include "audio_core/adsp/apps/audio_renderer/command_list_processor.h"
|
||||
#include "audio_core/renderer/command/mix/mix_ramp.h"
|
||||
#include "audio_core/renderer/command/mix/mix_ramp_grouped.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace AudioCore::Renderer {
|
||||
|
||||
void MixRampGroupedCommand::Dump(const ADSP::CommandListProcessor& processor, std::string& string) {
|
||||
void MixRampGroupedCommand::Dump(const AudioRenderer::CommandListProcessor& processor,
|
||||
std::string& string) {
|
||||
string += "MixRampGroupedCommand";
|
||||
for (u32 i = 0; i < buffer_count; i++) {
|
||||
string += fmt::format("\n\t{}", i);
|
||||
|
@ -21,7 +22,7 @@ void MixRampGroupedCommand::Dump(const ADSP::CommandListProcessor& processor, st
|
|||
}
|
||||
}
|
||||
|
||||
void MixRampGroupedCommand::Process(const ADSP::CommandListProcessor& processor) {
|
||||
void MixRampGroupedCommand::Process(const AudioRenderer::CommandListProcessor& processor) {
|
||||
std::span<s32> prev_samples = {reinterpret_cast<s32*>(previous_samples), MaxMixBuffers};
|
||||
|
||||
for (u32 i = 0; i < buffer_count; i++) {
|
||||
|
@ -58,8 +59,8 @@ void MixRampGroupedCommand::Process(const ADSP::CommandListProcessor& processor)
|
|||
}
|
||||
}
|
||||
|
||||
bool MixRampGroupedCommand::Verify(const ADSP::CommandListProcessor& processor) {
|
||||
bool MixRampGroupedCommand::Verify(const AudioRenderer::CommandListProcessor& processor) {
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -9,11 +9,12 @@
|
|||
#include "audio_core/renderer/command/icommand.h"
|
||||
#include "common/common_types.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace ADSP {
|
||||
namespace AudioCore::ADSP::AudioRenderer {
|
||||
class CommandListProcessor;
|
||||
}
|
||||
|
||||
namespace AudioCore::Renderer {
|
||||
|
||||
/**
|
||||
* AudioRenderer command for mixing multiple input mix buffers to multiple output mix buffers, with
|
||||
* a volume applied to the input, and volume ramping to smooth out the transition.
|
||||
|
@ -25,14 +26,14 @@ struct MixRampGroupedCommand : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @param string - The string to print into.
|
||||
*/
|
||||
void Dump(const ADSP::CommandListProcessor& processor, std::string& string) override;
|
||||
void Dump(const AudioRenderer::CommandListProcessor& processor, std::string& string) override;
|
||||
|
||||
/**
|
||||
* Process this command.
|
||||
*
|
||||
* @param processor - The CommandListProcessor processing this command.
|
||||
*/
|
||||
void Process(const ADSP::CommandListProcessor& processor) override;
|
||||
void Process(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/**
|
||||
* Verify this command's data is valid.
|
||||
|
@ -40,7 +41,7 @@ struct MixRampGroupedCommand : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @return True if the command is valid, otherwise false.
|
||||
*/
|
||||
bool Verify(const ADSP::CommandListProcessor& processor) override;
|
||||
bool Verify(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/// Fixed point precision
|
||||
u8 precision;
|
||||
|
@ -58,4 +59,4 @@ struct MixRampGroupedCommand : ICommand {
|
|||
CpuAddr previous_samples;
|
||||
};
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include "audio_core/renderer/adsp/command_list_processor.h"
|
||||
#include "audio_core/adsp/apps/audio_renderer/command_list_processor.h"
|
||||
#include "audio_core/renderer/command/mix/volume.h"
|
||||
#include "common/fixed_point.h"
|
||||
#include "common/logging/log.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace AudioCore::Renderer {
|
||||
/**
|
||||
* Apply volume to the input mix buffer, saving to the output buffer.
|
||||
*
|
||||
|
@ -29,7 +29,7 @@ static void ApplyUniformGain(std::span<s32> output, std::span<const s32> input,
|
|||
}
|
||||
}
|
||||
|
||||
void VolumeCommand::Dump([[maybe_unused]] const ADSP::CommandListProcessor& processor,
|
||||
void VolumeCommand::Dump([[maybe_unused]] const AudioRenderer::CommandListProcessor& processor,
|
||||
std::string& string) {
|
||||
string += fmt::format("VolumeCommand");
|
||||
string += fmt::format("\n\tinput {:02X}", input_index);
|
||||
|
@ -38,7 +38,7 @@ void VolumeCommand::Dump([[maybe_unused]] const ADSP::CommandListProcessor& proc
|
|||
string += "\n";
|
||||
}
|
||||
|
||||
void VolumeCommand::Process(const ADSP::CommandListProcessor& processor) {
|
||||
void VolumeCommand::Process(const AudioRenderer::CommandListProcessor& processor) {
|
||||
// If input and output buffers are the same, and the volume is 1.0f, this won't do
|
||||
// anything, so just skip.
|
||||
if (input_index == output_index && volume == 1.0f) {
|
||||
|
@ -65,8 +65,8 @@ void VolumeCommand::Process(const ADSP::CommandListProcessor& processor) {
|
|||
}
|
||||
}
|
||||
|
||||
bool VolumeCommand::Verify(const ADSP::CommandListProcessor& processor) {
|
||||
bool VolumeCommand::Verify(const AudioRenderer::CommandListProcessor& processor) {
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -8,11 +8,12 @@
|
|||
#include "audio_core/renderer/command/icommand.h"
|
||||
#include "common/common_types.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace ADSP {
|
||||
namespace AudioCore::ADSP::AudioRenderer {
|
||||
class CommandListProcessor;
|
||||
}
|
||||
|
||||
namespace AudioCore::Renderer {
|
||||
|
||||
/**
|
||||
* AudioRenderer command for applying volume to a mix buffer.
|
||||
*/
|
||||
|
@ -23,14 +24,14 @@ struct VolumeCommand : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @param string - The string to print into.
|
||||
*/
|
||||
void Dump(const ADSP::CommandListProcessor& processor, std::string& string) override;
|
||||
void Dump(const AudioRenderer::CommandListProcessor& processor, std::string& string) override;
|
||||
|
||||
/**
|
||||
* Process this command.
|
||||
*
|
||||
* @param processor - The CommandListProcessor processing this command.
|
||||
*/
|
||||
void Process(const ADSP::CommandListProcessor& processor) override;
|
||||
void Process(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/**
|
||||
* Verify this command's data is valid.
|
||||
|
@ -38,7 +39,7 @@ struct VolumeCommand : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @return True if the command is valid, otherwise false.
|
||||
*/
|
||||
bool Verify(const ADSP::CommandListProcessor& processor) override;
|
||||
bool Verify(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/// Fixed point precision
|
||||
u8 precision;
|
||||
|
@ -50,4 +51,4 @@ struct VolumeCommand : ICommand {
|
|||
f32 volume;
|
||||
};
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include "audio_core/renderer/adsp/command_list_processor.h"
|
||||
#include "audio_core/adsp/apps/audio_renderer/command_list_processor.h"
|
||||
#include "audio_core/renderer/command/mix/volume_ramp.h"
|
||||
#include "common/fixed_point.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace AudioCore::Renderer {
|
||||
/**
|
||||
* Apply volume with ramping to the input mix buffer, saving to the output buffer.
|
||||
*
|
||||
|
@ -38,7 +38,8 @@ static void ApplyLinearEnvelopeGain(std::span<s32> output, std::span<const s32>
|
|||
}
|
||||
}
|
||||
|
||||
void VolumeRampCommand::Dump(const ADSP::CommandListProcessor& processor, std::string& string) {
|
||||
void VolumeRampCommand::Dump(const AudioRenderer::CommandListProcessor& processor,
|
||||
std::string& string) {
|
||||
const auto ramp{(volume - prev_volume) / static_cast<f32>(processor.sample_count)};
|
||||
string += fmt::format("VolumeRampCommand");
|
||||
string += fmt::format("\n\tinput {:02X}", input_index);
|
||||
|
@ -49,7 +50,7 @@ void VolumeRampCommand::Dump(const ADSP::CommandListProcessor& processor, std::s
|
|||
string += "\n";
|
||||
}
|
||||
|
||||
void VolumeRampCommand::Process(const ADSP::CommandListProcessor& processor) {
|
||||
void VolumeRampCommand::Process(const AudioRenderer::CommandListProcessor& processor) {
|
||||
auto output{processor.mix_buffers.subspan(output_index * processor.sample_count,
|
||||
processor.sample_count)};
|
||||
auto input{processor.mix_buffers.subspan(input_index * processor.sample_count,
|
||||
|
@ -77,8 +78,8 @@ void VolumeRampCommand::Process(const ADSP::CommandListProcessor& processor) {
|
|||
}
|
||||
}
|
||||
|
||||
bool VolumeRampCommand::Verify(const ADSP::CommandListProcessor& processor) {
|
||||
bool VolumeRampCommand::Verify(const AudioRenderer::CommandListProcessor& processor) {
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -8,11 +8,12 @@
|
|||
#include "audio_core/renderer/command/icommand.h"
|
||||
#include "common/common_types.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace ADSP {
|
||||
namespace AudioCore::ADSP::AudioRenderer {
|
||||
class CommandListProcessor;
|
||||
}
|
||||
|
||||
namespace AudioCore::Renderer {
|
||||
|
||||
/**
|
||||
* AudioRenderer command for applying volume to a mix buffer, with ramping for the volume to smooth
|
||||
* out the transition.
|
||||
|
@ -24,14 +25,14 @@ struct VolumeRampCommand : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @param string - The string to print into.
|
||||
*/
|
||||
void Dump(const ADSP::CommandListProcessor& processor, std::string& string) override;
|
||||
void Dump(const AudioRenderer::CommandListProcessor& processor, std::string& string) override;
|
||||
|
||||
/**
|
||||
* Process this command.
|
||||
*
|
||||
* @param processor - The CommandListProcessor processing this command.
|
||||
*/
|
||||
void Process(const ADSP::CommandListProcessor& processor) override;
|
||||
void Process(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/**
|
||||
* Verify this command's data is valid.
|
||||
|
@ -39,7 +40,7 @@ struct VolumeRampCommand : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @return True if the command is valid, otherwise false.
|
||||
*/
|
||||
bool Verify(const ADSP::CommandListProcessor& processor) override;
|
||||
bool Verify(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/// Fixed point precision
|
||||
u8 precision;
|
||||
|
@ -53,4 +54,4 @@ struct VolumeRampCommand : ICommand {
|
|||
f32 volume;
|
||||
};
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -1,25 +1,25 @@
|
|||
// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include "audio_core/renderer/adsp/command_list_processor.h"
|
||||
#include "audio_core/adsp/apps/audio_renderer/command_list_processor.h"
|
||||
#include "audio_core/renderer/command/performance/performance.h"
|
||||
#include "core/core.h"
|
||||
#include "core/core_timing.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace AudioCore::Renderer {
|
||||
|
||||
void PerformanceCommand::Dump([[maybe_unused]] const ADSP::CommandListProcessor& processor,
|
||||
void PerformanceCommand::Dump([[maybe_unused]] const AudioRenderer::CommandListProcessor& processor,
|
||||
std::string& string) {
|
||||
string += fmt::format("PerformanceCommand\n\tstate {}\n", static_cast<u32>(state));
|
||||
}
|
||||
|
||||
void PerformanceCommand::Process(const ADSP::CommandListProcessor& processor) {
|
||||
void PerformanceCommand::Process(const AudioRenderer::CommandListProcessor& processor) {
|
||||
auto base{entry_address.translated_address};
|
||||
if (state == PerformanceState::Start) {
|
||||
auto start_time_ptr{reinterpret_cast<u32*>(base + entry_address.entry_start_time_offset)};
|
||||
*start_time_ptr =
|
||||
static_cast<u32>(processor.system->CoreTiming().GetClockTicks() - processor.start_time -
|
||||
processor.current_processing_time);
|
||||
static_cast<u32>(processor.system->CoreTiming().GetGlobalTimeUs().count() -
|
||||
processor.start_time - processor.current_processing_time);
|
||||
} else if (state == PerformanceState::Stop) {
|
||||
auto processed_time_ptr{
|
||||
reinterpret_cast<u32*>(base + entry_address.entry_processed_time_offset)};
|
||||
|
@ -27,14 +27,14 @@ void PerformanceCommand::Process(const ADSP::CommandListProcessor& processor) {
|
|||
reinterpret_cast<u32*>(base + entry_address.header_entry_count_offset)};
|
||||
|
||||
*processed_time_ptr =
|
||||
static_cast<u32>(processor.system->CoreTiming().GetClockTicks() - processor.start_time -
|
||||
processor.current_processing_time);
|
||||
static_cast<u32>(processor.system->CoreTiming().GetGlobalTimeUs().count() -
|
||||
processor.start_time - processor.current_processing_time);
|
||||
(*entry_count_ptr)++;
|
||||
}
|
||||
}
|
||||
|
||||
bool PerformanceCommand::Verify(const ADSP::CommandListProcessor& processor) {
|
||||
bool PerformanceCommand::Verify(const AudioRenderer::CommandListProcessor& processor) {
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -10,11 +10,12 @@
|
|||
#include "audio_core/renderer/performance/performance_manager.h"
|
||||
#include "common/common_types.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace ADSP {
|
||||
namespace AudioCore::ADSP::AudioRenderer {
|
||||
class CommandListProcessor;
|
||||
}
|
||||
|
||||
namespace AudioCore::Renderer {
|
||||
|
||||
/**
|
||||
* AudioRenderer command for writing AudioRenderer performance metrics back to the sysmodule.
|
||||
*/
|
||||
|
@ -25,14 +26,14 @@ struct PerformanceCommand : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @param string - The string to print into.
|
||||
*/
|
||||
void Dump(const ADSP::CommandListProcessor& processor, std::string& string) override;
|
||||
void Dump(const AudioRenderer::CommandListProcessor& processor, std::string& string) override;
|
||||
|
||||
/**
|
||||
* Process this command.
|
||||
*
|
||||
* @param processor - The CommandListProcessor processing this command.
|
||||
*/
|
||||
void Process(const ADSP::CommandListProcessor& processor) override;
|
||||
void Process(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/**
|
||||
* Verify this command's data is valid.
|
||||
|
@ -40,7 +41,7 @@ struct PerformanceCommand : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @return True if the command is valid, otherwise false.
|
||||
*/
|
||||
bool Verify(const ADSP::CommandListProcessor& processor) override;
|
||||
bool Verify(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/// State of the performance
|
||||
PerformanceState state;
|
||||
|
@ -48,4 +49,4 @@ struct PerformanceCommand : ICommand {
|
|||
PerformanceEntryAddresses entry_address;
|
||||
};
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include "audio_core/renderer/adsp/command_list_processor.h"
|
||||
#include "audio_core/adsp/apps/audio_renderer/command_list_processor.h"
|
||||
#include "audio_core/renderer/command/resample/downmix_6ch_to_2ch.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace AudioCore::Renderer {
|
||||
|
||||
void DownMix6chTo2chCommand::Dump([[maybe_unused]] const ADSP::CommandListProcessor& processor,
|
||||
std::string& string) {
|
||||
void DownMix6chTo2chCommand::Dump(
|
||||
[[maybe_unused]] const AudioRenderer::CommandListProcessor& processor, std::string& string) {
|
||||
string += fmt::format("DownMix6chTo2chCommand\n\tinputs: ");
|
||||
for (u32 i = 0; i < MaxChannels; i++) {
|
||||
string += fmt::format("{:02X}, ", inputs[i]);
|
||||
|
@ -19,7 +19,7 @@ void DownMix6chTo2chCommand::Dump([[maybe_unused]] const ADSP::CommandListProces
|
|||
string += "\n";
|
||||
}
|
||||
|
||||
void DownMix6chTo2chCommand::Process(const ADSP::CommandListProcessor& processor) {
|
||||
void DownMix6chTo2chCommand::Process(const AudioRenderer::CommandListProcessor& processor) {
|
||||
auto in_front_left{
|
||||
processor.mix_buffers.subspan(inputs[0] * processor.sample_count, processor.sample_count)};
|
||||
auto in_front_right{
|
||||
|
@ -67,8 +67,8 @@ void DownMix6chTo2chCommand::Process(const ADSP::CommandListProcessor& processor
|
|||
std::memset(out_back_right.data(), 0, out_back_right.size_bytes());
|
||||
}
|
||||
|
||||
bool DownMix6chTo2chCommand::Verify(const ADSP::CommandListProcessor& processor) {
|
||||
bool DownMix6chTo2chCommand::Verify(const AudioRenderer::CommandListProcessor& processor) {
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -9,11 +9,12 @@
|
|||
#include "common/common_types.h"
|
||||
#include "common/fixed_point.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace ADSP {
|
||||
namespace AudioCore::ADSP::AudioRenderer {
|
||||
class CommandListProcessor;
|
||||
}
|
||||
|
||||
namespace AudioCore::Renderer {
|
||||
|
||||
/**
|
||||
* AudioRenderer command for downmixing 6 channels to 2.
|
||||
* Channel layout (SMPTE):
|
||||
|
@ -31,14 +32,14 @@ struct DownMix6chTo2chCommand : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @param string - The string to print into.
|
||||
*/
|
||||
void Dump(const ADSP::CommandListProcessor& processor, std::string& string) override;
|
||||
void Dump(const AudioRenderer::CommandListProcessor& processor, std::string& string) override;
|
||||
|
||||
/**
|
||||
* Process this command.
|
||||
*
|
||||
* @param processor - The CommandListProcessor processing this command.
|
||||
*/
|
||||
void Process(const ADSP::CommandListProcessor& processor) override;
|
||||
void Process(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/**
|
||||
* Verify this command's data is valid.
|
||||
|
@ -46,7 +47,7 @@ struct DownMix6chTo2chCommand : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @return True if the command is valid, otherwise false.
|
||||
*/
|
||||
bool Verify(const ADSP::CommandListProcessor& processor) override;
|
||||
bool Verify(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/// Input mix buffer offsets for each channel
|
||||
std::array<s16, MaxChannels> inputs;
|
||||
|
@ -56,4 +57,4 @@ struct DownMix6chTo2chCommand : ICommand {
|
|||
std::array<Common::FixedPoint<48, 16>, 4> down_mix_coeff;
|
||||
};
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
#include "audio_core/renderer/command/resample/resample.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace AudioCore::Renderer {
|
||||
|
||||
static void ResampleLowQuality(std::span<s32> output, std::span<const s16> input,
|
||||
const Common::FixedPoint<49, 15>& sample_rate_ratio,
|
||||
|
@ -880,4 +880,4 @@ void Resample(std::span<s32> output, std::span<const s16> input,
|
|||
}
|
||||
}
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
#include "common/common_types.h"
|
||||
#include "common/fixed_point.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace AudioCore::Renderer {
|
||||
/**
|
||||
* Resample an input buffer into an output buffer, according to the sample_rate_ratio.
|
||||
*
|
||||
|
@ -26,4 +26,4 @@ void Resample(std::span<s32> output, std::span<const s16> input,
|
|||
const Common::FixedPoint<49, 15>& sample_rate_ratio,
|
||||
Common::FixedPoint<49, 15>& fraction, u32 samples_to_write, SrcQuality src_quality);
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -3,11 +3,11 @@
|
|||
|
||||
#include <array>
|
||||
|
||||
#include "audio_core/renderer/adsp/command_list_processor.h"
|
||||
#include "audio_core/adsp/apps/audio_renderer/command_list_processor.h"
|
||||
#include "audio_core/renderer/command/resample/upsample.h"
|
||||
#include "audio_core/renderer/upsampler/upsampler_info.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace AudioCore::Renderer {
|
||||
/**
|
||||
* Upsampling impl. Input must be 8K, 16K or 32K, output is 48K.
|
||||
*
|
||||
|
@ -198,7 +198,7 @@ static void SrcProcessFrame(std::span<s32> output, std::span<const s32> input,
|
|||
}
|
||||
}
|
||||
|
||||
auto UpsampleCommand::Dump([[maybe_unused]] const ADSP::CommandListProcessor& processor,
|
||||
auto UpsampleCommand::Dump([[maybe_unused]] const AudioRenderer::CommandListProcessor& processor,
|
||||
std::string& string) -> void {
|
||||
string += fmt::format("UpsampleCommand\n\tsource_sample_count {} source_sample_rate {}",
|
||||
source_sample_count, source_sample_rate);
|
||||
|
@ -213,7 +213,7 @@ auto UpsampleCommand::Dump([[maybe_unused]] const ADSP::CommandListProcessor& pr
|
|||
string += "\n";
|
||||
}
|
||||
|
||||
void UpsampleCommand::Process(const ADSP::CommandListProcessor& processor) {
|
||||
void UpsampleCommand::Process(const AudioRenderer::CommandListProcessor& processor) {
|
||||
const auto info{reinterpret_cast<UpsamplerInfo*>(upsampler_info)};
|
||||
const auto input_count{std::min(info->input_count, buffer_count)};
|
||||
const std::span<const s16> inputs_{reinterpret_cast<const s16*>(inputs), input_count};
|
||||
|
@ -234,8 +234,8 @@ void UpsampleCommand::Process(const ADSP::CommandListProcessor& processor) {
|
|||
}
|
||||
}
|
||||
|
||||
bool UpsampleCommand::Verify(const ADSP::CommandListProcessor& processor) {
|
||||
bool UpsampleCommand::Verify(const AudioRenderer::CommandListProcessor& processor) {
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -8,11 +8,12 @@
|
|||
#include "audio_core/renderer/command/icommand.h"
|
||||
#include "common/common_types.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace ADSP {
|
||||
namespace AudioCore::ADSP::AudioRenderer {
|
||||
class CommandListProcessor;
|
||||
}
|
||||
|
||||
namespace AudioCore::Renderer {
|
||||
|
||||
/**
|
||||
* AudioRenderer command for upsampling a mix buffer to 48Khz.
|
||||
* Input must be 8Khz, 16Khz or 32Khz, and output will be 48Khz.
|
||||
|
@ -24,14 +25,14 @@ struct UpsampleCommand : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @param string - The string to print into.
|
||||
*/
|
||||
void Dump(const ADSP::CommandListProcessor& processor, std::string& string) override;
|
||||
void Dump(const AudioRenderer::CommandListProcessor& processor, std::string& string) override;
|
||||
|
||||
/**
|
||||
* Process this command.
|
||||
*
|
||||
* @param processor - The CommandListProcessor processing this command.
|
||||
*/
|
||||
void Process(const ADSP::CommandListProcessor& processor) override;
|
||||
void Process(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/**
|
||||
* Verify this command's data is valid.
|
||||
|
@ -39,7 +40,7 @@ struct UpsampleCommand : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @return True if the command is valid, otherwise false.
|
||||
*/
|
||||
bool Verify(const ADSP::CommandListProcessor& processor) override;
|
||||
bool Verify(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/// Pointer to the output samples buffer.
|
||||
CpuAddr samples_buffer;
|
||||
|
@ -57,4 +58,4 @@ struct UpsampleCommand : ICommand {
|
|||
CpuAddr upsampler_info;
|
||||
};
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -3,14 +3,14 @@
|
|||
|
||||
#include <vector>
|
||||
|
||||
#include "audio_core/renderer/adsp/command_list_processor.h"
|
||||
#include "audio_core/adsp/apps/audio_renderer/command_list_processor.h"
|
||||
#include "audio_core/renderer/command/sink/circular_buffer.h"
|
||||
#include "core/memory.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace AudioCore::Renderer {
|
||||
|
||||
void CircularBufferSinkCommand::Dump([[maybe_unused]] const ADSP::CommandListProcessor& processor,
|
||||
std::string& string) {
|
||||
void CircularBufferSinkCommand::Dump(
|
||||
[[maybe_unused]] const AudioRenderer::CommandListProcessor& processor, std::string& string) {
|
||||
string += fmt::format(
|
||||
"CircularBufferSinkCommand\n\tinput_count {} ring size {:04X} ring pos {:04X}\n\tinputs: ",
|
||||
input_count, size, pos);
|
||||
|
@ -20,7 +20,7 @@ void CircularBufferSinkCommand::Dump([[maybe_unused]] const ADSP::CommandListPro
|
|||
string += "\n";
|
||||
}
|
||||
|
||||
void CircularBufferSinkCommand::Process(const ADSP::CommandListProcessor& processor) {
|
||||
void CircularBufferSinkCommand::Process(const AudioRenderer::CommandListProcessor& processor) {
|
||||
constexpr s32 min{std::numeric_limits<s16>::min()};
|
||||
constexpr s32 max{std::numeric_limits<s16>::max()};
|
||||
|
||||
|
@ -41,8 +41,8 @@ void CircularBufferSinkCommand::Process(const ADSP::CommandListProcessor& proces
|
|||
}
|
||||
}
|
||||
|
||||
bool CircularBufferSinkCommand::Verify(const ADSP::CommandListProcessor& processor) {
|
||||
bool CircularBufferSinkCommand::Verify(const AudioRenderer::CommandListProcessor& processor) {
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -8,11 +8,12 @@
|
|||
#include "audio_core/renderer/command/icommand.h"
|
||||
#include "common/common_types.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace ADSP {
|
||||
namespace AudioCore::ADSP::AudioRenderer {
|
||||
class CommandListProcessor;
|
||||
}
|
||||
|
||||
namespace AudioCore::Renderer {
|
||||
|
||||
/**
|
||||
* AudioRenderer command for sinking samples to a circular buffer.
|
||||
*/
|
||||
|
@ -23,14 +24,14 @@ struct CircularBufferSinkCommand : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @param string - The string to print into.
|
||||
*/
|
||||
void Dump(const ADSP::CommandListProcessor& processor, std::string& string) override;
|
||||
void Dump(const AudioRenderer::CommandListProcessor& processor, std::string& string) override;
|
||||
|
||||
/**
|
||||
* Process this command.
|
||||
*
|
||||
* @param processor - The CommandListProcessor processing this command.
|
||||
*/
|
||||
void Process(const ADSP::CommandListProcessor& processor) override;
|
||||
void Process(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/**
|
||||
* Verify this command's data is valid.
|
||||
|
@ -38,7 +39,7 @@ struct CircularBufferSinkCommand : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @return True if the command is valid, otherwise false.
|
||||
*/
|
||||
bool Verify(const ADSP::CommandListProcessor& processor) override;
|
||||
bool Verify(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/// Number of input mix buffers
|
||||
u32 input_count;
|
||||
|
@ -52,4 +53,4 @@ struct CircularBufferSinkCommand : ICommand {
|
|||
u32 pos;
|
||||
};
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -3,13 +3,13 @@
|
|||
|
||||
#include <algorithm>
|
||||
|
||||
#include "audio_core/renderer/adsp/command_list_processor.h"
|
||||
#include "audio_core/adsp/apps/audio_renderer/command_list_processor.h"
|
||||
#include "audio_core/renderer/command/sink/device.h"
|
||||
#include "audio_core/sink/sink.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace AudioCore::Renderer {
|
||||
|
||||
void DeviceSinkCommand::Dump([[maybe_unused]] const ADSP::CommandListProcessor& processor,
|
||||
void DeviceSinkCommand::Dump([[maybe_unused]] const AudioRenderer::CommandListProcessor& processor,
|
||||
std::string& string) {
|
||||
string += fmt::format("DeviceSinkCommand\n\t{} session {} input_count {}\n\tinputs: ",
|
||||
std::string_view(name), session_id, input_count);
|
||||
|
@ -19,7 +19,7 @@ void DeviceSinkCommand::Dump([[maybe_unused]] const ADSP::CommandListProcessor&
|
|||
string += "\n";
|
||||
}
|
||||
|
||||
void DeviceSinkCommand::Process(const ADSP::CommandListProcessor& processor) {
|
||||
void DeviceSinkCommand::Process(const AudioRenderer::CommandListProcessor& processor) {
|
||||
constexpr s32 min = std::numeric_limits<s16>::min();
|
||||
constexpr s32 max = std::numeric_limits<s16>::max();
|
||||
|
||||
|
@ -51,8 +51,8 @@ void DeviceSinkCommand::Process(const ADSP::CommandListProcessor& processor) {
|
|||
}
|
||||
}
|
||||
|
||||
bool DeviceSinkCommand::Verify(const ADSP::CommandListProcessor& processor) {
|
||||
bool DeviceSinkCommand::Verify(const AudioRenderer::CommandListProcessor& processor) {
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
|
@ -10,11 +10,12 @@
|
|||
#include "audio_core/renderer/command/icommand.h"
|
||||
#include "common/common_types.h"
|
||||
|
||||
namespace AudioCore::AudioRenderer {
|
||||
namespace ADSP {
|
||||
namespace AudioCore::ADSP::AudioRenderer {
|
||||
class CommandListProcessor;
|
||||
}
|
||||
|
||||
namespace AudioCore::Renderer {
|
||||
|
||||
/**
|
||||
* AudioRenderer command for sinking samples to an output device.
|
||||
*/
|
||||
|
@ -25,14 +26,14 @@ struct DeviceSinkCommand : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @param string - The string to print into.
|
||||
*/
|
||||
void Dump(const ADSP::CommandListProcessor& processor, std::string& string) override;
|
||||
void Dump(const AudioRenderer::CommandListProcessor& processor, std::string& string) override;
|
||||
|
||||
/**
|
||||
* Process this command.
|
||||
*
|
||||
* @param processor - The CommandListProcessor processing this command.
|
||||
*/
|
||||
void Process(const ADSP::CommandListProcessor& processor) override;
|
||||
void Process(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/**
|
||||
* Verify this command's data is valid.
|
||||
|
@ -40,7 +41,7 @@ struct DeviceSinkCommand : ICommand {
|
|||
* @param processor - The CommandListProcessor processing this command.
|
||||
* @return True if the command is valid, otherwise false.
|
||||
*/
|
||||
bool Verify(const ADSP::CommandListProcessor& processor) override;
|
||||
bool Verify(const AudioRenderer::CommandListProcessor& processor) override;
|
||||
|
||||
/// Device name
|
||||
char name[0x100];
|
||||
|
@ -54,4 +55,4 @@ struct DeviceSinkCommand : ICommand {
|
|||
std::array<s16, MaxChannels> inputs;
|
||||
};
|
||||
|
||||
} // namespace AudioCore::AudioRenderer
|
||||
} // namespace AudioCore::Renderer
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue