yuzu-emu
/
yuzu-mainline
Archived
1
0
Fork 0

Merge pull request #1319 from lioncash/audio

audio_core: Replace includes with forward declarations where applicable.
This commit is contained in:
bunnei 2018-09-18 22:14:26 -04:00 committed by GitHub
commit d85130d7be
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 59 additions and 43 deletions

View File

@ -3,9 +3,12 @@
// Refer to the license.txt file included. // Refer to the license.txt file included.
#include "audio_core/algorithm/interpolate.h" #include "audio_core/algorithm/interpolate.h"
#include "audio_core/audio_out.h"
#include "audio_core/audio_renderer.h" #include "audio_core/audio_renderer.h"
#include "audio_core/codec.h"
#include "common/assert.h" #include "common/assert.h"
#include "common/logging/log.h" #include "common/logging/log.h"
#include "core/hle/kernel/event.h"
#include "core/memory.h" #include "core/memory.h"
namespace AudioCore { namespace AudioCore {
@ -13,6 +16,41 @@ namespace AudioCore {
constexpr u32 STREAM_SAMPLE_RATE{48000}; constexpr u32 STREAM_SAMPLE_RATE{48000};
constexpr u32 STREAM_NUM_CHANNELS{2}; constexpr u32 STREAM_NUM_CHANNELS{2};
class AudioRenderer::VoiceState {
public:
bool IsPlaying() const {
return is_in_use && info.play_state == PlayState::Started;
}
const VoiceOutStatus& GetOutStatus() const {
return out_status;
}
const VoiceInfo& GetInfo() const {
return info;
}
VoiceInfo& Info() {
return info;
}
void SetWaveIndex(std::size_t index);
std::vector<s16> DequeueSamples(std::size_t sample_count);
void UpdateState();
void RefreshBuffer();
private:
bool is_in_use{};
bool is_refresh_pending{};
std::size_t wave_index{};
std::size_t offset{};
Codec::ADPCMState adpcm_state{};
InterpolationState interp_state{};
std::vector<s16> samples;
VoiceOutStatus out_status{};
VoiceInfo info{};
};
AudioRenderer::AudioRenderer(AudioRendererParameter params, AudioRenderer::AudioRenderer(AudioRendererParameter params,
Kernel::SharedPtr<Kernel::Event> buffer_event) Kernel::SharedPtr<Kernel::Event> buffer_event)
: worker_params{params}, buffer_event{buffer_event}, voices(params.voice_count) { : worker_params{params}, buffer_event{buffer_event}, voices(params.voice_count) {
@ -27,6 +65,8 @@ AudioRenderer::AudioRenderer(AudioRendererParameter params,
QueueMixedBuffer(2); QueueMixedBuffer(2);
} }
AudioRenderer::~AudioRenderer() = default;
u32 AudioRenderer::GetSampleRate() const { u32 AudioRenderer::GetSampleRate() const {
return worker_params.sample_rate; return worker_params.sample_rate;
} }

View File

@ -8,16 +8,20 @@
#include <memory> #include <memory>
#include <vector> #include <vector>
#include "audio_core/algorithm/interpolate.h"
#include "audio_core/audio_out.h"
#include "audio_core/codec.h"
#include "audio_core/stream.h" #include "audio_core/stream.h"
#include "common/common_funcs.h"
#include "common/common_types.h" #include "common/common_types.h"
#include "common/swap.h" #include "common/swap.h"
#include "core/hle/kernel/event.h" #include "core/hle/kernel/object.h"
namespace Kernel {
class Event;
}
namespace AudioCore { namespace AudioCore {
class AudioOut;
enum class PlayState : u8 { enum class PlayState : u8 {
Started = 0, Started = 0,
Stopped = 1, Stopped = 1,
@ -158,6 +162,8 @@ static_assert(sizeof(UpdateDataHeader) == 0x40, "UpdateDataHeader has wrong size
class AudioRenderer { class AudioRenderer {
public: public:
AudioRenderer(AudioRendererParameter params, Kernel::SharedPtr<Kernel::Event> buffer_event); AudioRenderer(AudioRendererParameter params, Kernel::SharedPtr<Kernel::Event> buffer_event);
~AudioRenderer();
std::vector<u8> UpdateAudioRenderer(const std::vector<u8>& input_params); std::vector<u8> UpdateAudioRenderer(const std::vector<u8>& input_params);
void QueueMixedBuffer(Buffer::Tag tag); void QueueMixedBuffer(Buffer::Tag tag);
void ReleaseAndQueueBuffers(); void ReleaseAndQueueBuffers();
@ -166,45 +172,12 @@ public:
u32 GetMixBufferCount() const; u32 GetMixBufferCount() const;
private: private:
class VoiceState { class VoiceState;
public:
bool IsPlaying() const {
return is_in_use && info.play_state == PlayState::Started;
}
const VoiceOutStatus& GetOutStatus() const {
return out_status;
}
const VoiceInfo& GetInfo() const {
return info;
}
VoiceInfo& Info() {
return info;
}
void SetWaveIndex(std::size_t index);
std::vector<s16> DequeueSamples(std::size_t sample_count);
void UpdateState();
void RefreshBuffer();
private:
bool is_in_use{};
bool is_refresh_pending{};
std::size_t wave_index{};
std::size_t offset{};
Codec::ADPCMState adpcm_state{};
InterpolationState interp_state{};
std::vector<s16> samples;
VoiceOutStatus out_status{};
VoiceInfo info{};
};
AudioRendererParameter worker_params; AudioRendererParameter worker_params;
Kernel::SharedPtr<Kernel::Event> buffer_event; Kernel::SharedPtr<Kernel::Event> buffer_event;
std::vector<VoiceState> voices; std::vector<VoiceState> voices;
std::unique_ptr<AudioCore::AudioOut> audio_out; std::unique_ptr<AudioOut> audio_out;
AudioCore::StreamPtr stream; AudioCore::StreamPtr stream;
}; };

View File

@ -7,6 +7,7 @@
#include "audio_core/sink.h" #include "audio_core/sink.h"
#include "audio_core/sink_details.h" #include "audio_core/sink_details.h"
#include "audio_core/sink_stream.h"
#include "audio_core/stream.h" #include "audio_core/stream.h"
#include "common/assert.h" #include "common/assert.h"
#include "common/logging/log.h" #include "common/logging/log.h"

View File

@ -11,13 +11,16 @@
#include <queue> #include <queue>
#include "audio_core/buffer.h" #include "audio_core/buffer.h"
#include "audio_core/sink_stream.h"
#include "common/assert.h"
#include "common/common_types.h" #include "common/common_types.h"
#include "core/core_timing.h"
namespace CoreTiming {
struct EventType;
}
namespace AudioCore { namespace AudioCore {
class SinkStream;
/** /**
* Represents an audio stream, which is a sequence of queued buffers, to be outputed by AudioOut * Represents an audio stream, which is a sequence of queued buffers, to be outputed by AudioOut
*/ */

View File

@ -4,7 +4,6 @@
#pragma once #pragma once
#include <array>
#include <cstddef> #include <cstddef>
#include <SoundTouch.h> #include <SoundTouch.h>
#include "common/common_types.h" #include "common/common_types.h"