diff options
| author | 2018-07-28 13:44:50 -0400 | |
|---|---|---|
| committer | 2018-07-30 21:45:24 -0400 | |
| commit | f437c11caf2c1afc0b7d0fdb808be10d7b1adfcf (patch) | |
| tree | e5224d2e6b57c5ac0aec46377d6bfae9072ab820 /src/audio_core/stream.cpp | |
| parent | audio_core: Add interfaces for Sink and SinkStream. (diff) | |
| download | yuzu-f437c11caf2c1afc0b7d0fdb808be10d7b1adfcf.tar.gz yuzu-f437c11caf2c1afc0b7d0fdb808be10d7b1adfcf.tar.xz yuzu-f437c11caf2c1afc0b7d0fdb808be10d7b1adfcf.zip | |
audio_core: Implement Sink and SinkStream interfaces with cubeb.
Diffstat (limited to 'src/audio_core/stream.cpp')
| -rw-r--r-- | src/audio_core/stream.cpp | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/audio_core/stream.cpp b/src/audio_core/stream.cpp index 63edc6c8d..689f51a1d 100644 --- a/src/audio_core/stream.cpp +++ b/src/audio_core/stream.cpp | |||
| @@ -7,6 +7,8 @@ | |||
| 7 | #include "core/core_timing.h" | 7 | #include "core/core_timing.h" |
| 8 | #include "core/core_timing_util.h" | 8 | #include "core/core_timing_util.h" |
| 9 | 9 | ||
| 10 | #include "audio_core/sink.h" | ||
| 11 | #include "audio_core/sink_details.h" | ||
| 10 | #include "audio_core/stream.h" | 12 | #include "audio_core/stream.h" |
| 11 | 13 | ||
| 12 | namespace AudioCore { | 14 | namespace AudioCore { |
| @@ -31,6 +33,11 @@ u32 Stream::GetSampleSize() const { | |||
| 31 | return GetNumChannels() * 2; | 33 | return GetNumChannels() * 2; |
| 32 | } | 34 | } |
| 33 | 35 | ||
| 36 | Stream::Stream(u32 sample_rate, Format format, ReleaseCallback&& release_callback, | ||
| 37 | SinkStream& sink_stream) | ||
| 38 | : sample_rate{sample_rate}, format{format}, release_callback{std::move(release_callback)}, | ||
| 39 | sink_stream{sink_stream} { | ||
| 40 | |||
| 34 | release_event = CoreTiming::RegisterEvent( | 41 | release_event = CoreTiming::RegisterEvent( |
| 35 | "Stream::Release", [this](u64 userdata, int cycles_late) { ReleaseActiveBuffer(); }); | 42 | "Stream::Release", [this](u64 userdata, int cycles_late) { ReleaseActiveBuffer(); }); |
| 36 | } | 43 | } |
| @@ -68,6 +75,10 @@ void Stream::PlayNextBuffer() { | |||
| 68 | active_buffer = queued_buffers.front(); | 75 | active_buffer = queued_buffers.front(); |
| 69 | queued_buffers.pop(); | 76 | queued_buffers.pop(); |
| 70 | 77 | ||
| 78 | sink_stream.EnqueueSamples(GetNumChannels(), | ||
| 79 | reinterpret_cast<const s16*>(active_buffer->GetData().data()), | ||
| 80 | active_buffer->GetData().size() / GetSampleSize()); | ||
| 81 | |||
| 71 | CoreTiming::ScheduleEventThreadsafe(GetBufferReleaseCycles(*active_buffer), release_event, {}); | 82 | CoreTiming::ScheduleEventThreadsafe(GetBufferReleaseCycles(*active_buffer), release_event, {}); |
| 72 | } | 83 | } |
| 73 | 84 | ||