diff options
author | bunnei <bunneidev@gmail.com> | 2018-07-28 13:44:50 -0400 |
---|---|---|
committer | bunnei <bunneidev@gmail.com> | 2018-07-30 21:45:24 -0400 |
commit | f437c11caf2c1afc0b7d0fdb808be10d7b1adfcf (patch) | |
tree | e5224d2e6b57c5ac0aec46377d6bfae9072ab820 /src/audio_core/stream.cpp | |
parent | 9ef227e09d6e374008d9536935d01c11a6ca06bd (diff) |
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 63edc6c8da..689f51a1d7 100644 --- a/src/audio_core/stream.cpp +++ b/src/audio_core/stream.cpp @@ -7,6 +7,8 @@ #include "core/core_timing.h" #include "core/core_timing_util.h" +#include "audio_core/sink.h" +#include "audio_core/sink_details.h" #include "audio_core/stream.h" namespace AudioCore { @@ -31,6 +33,11 @@ u32 Stream::GetSampleSize() const { return GetNumChannels() * 2; } +Stream::Stream(u32 sample_rate, Format format, ReleaseCallback&& release_callback, + SinkStream& sink_stream) + : sample_rate{sample_rate}, format{format}, release_callback{std::move(release_callback)}, + sink_stream{sink_stream} { + release_event = CoreTiming::RegisterEvent( "Stream::Release", [this](u64 userdata, int cycles_late) { ReleaseActiveBuffer(); }); } @@ -68,6 +75,10 @@ void Stream::PlayNextBuffer() { active_buffer = queued_buffers.front(); queued_buffers.pop(); + sink_stream.EnqueueSamples(GetNumChannels(), + reinterpret_cast<const s16*>(active_buffer->GetData().data()), + active_buffer->GetData().size() / GetSampleSize()); + CoreTiming::ScheduleEventThreadsafe(GetBufferReleaseCycles(*active_buffer), release_event, {}); } |