sink: Change EnqueueSamples to take a pointer to a buffer instead of a std::vector

master
MerryMage 2016-08-31 16:55:10 +07:00
parent 87893e6d68
commit 0ef4185644
5 changed files with 9 additions and 9 deletions

@ -90,7 +90,8 @@ static AudioCore::TimeStretcher time_stretcher;
static void OutputCurrentFrame(const StereoFrame16& frame) { static void OutputCurrentFrame(const StereoFrame16& frame) {
time_stretcher.AddSamples(&frame[0][0], frame.size()); time_stretcher.AddSamples(&frame[0][0], frame.size());
sink->EnqueueSamples(time_stretcher.Process(sink->SamplesInQueue())); std::vector<s16> stretched_samples = time_stretcher.Process(sink->SamplesInQueue());
sink->EnqueueSamples(stretched_samples.data(), stretched_samples.size() / 2);
} }
// Public Interface // Public Interface

@ -19,7 +19,7 @@ public:
return native_sample_rate; return native_sample_rate;
} }
void EnqueueSamples(const std::vector<s16>&) override {} void EnqueueSamples(const s16*, size_t) override {}
size_t SamplesInQueue() const override { size_t SamplesInQueue() const override {
return 0; return 0;

@ -71,14 +71,12 @@ unsigned int SDL2Sink::GetNativeSampleRate() const {
return impl->sample_rate; return impl->sample_rate;
} }
void SDL2Sink::EnqueueSamples(const std::vector<s16>& samples) { void SDL2Sink::EnqueueSamples(const s16* samples, size_t sample_count) {
if (impl->audio_device_id <= 0) if (impl->audio_device_id <= 0)
return; return;
ASSERT_MSG(samples.size() % 2 == 0, "Samples must be in interleaved stereo PCM16 format (size must be a multiple of two)");
SDL_LockAudioDevice(impl->audio_device_id); SDL_LockAudioDevice(impl->audio_device_id);
impl->queue.emplace_back(samples); impl->queue.emplace_back(samples, samples + sample_count * 2);
SDL_UnlockAudioDevice(impl->audio_device_id); SDL_UnlockAudioDevice(impl->audio_device_id);
} }

@ -18,7 +18,7 @@ public:
unsigned int GetNativeSampleRate() const override; unsigned int GetNativeSampleRate() const override;
void EnqueueSamples(const std::vector<s16>& samples) override; void EnqueueSamples(const s16* samples, size_t sample_count) override;
size_t SamplesInQueue() const override; size_t SamplesInQueue() const override;

@ -23,9 +23,10 @@ public:
/** /**
* Feed stereo samples to sink. * Feed stereo samples to sink.
* @param samples Samples in interleaved stereo PCM16 format. Size of vector must be multiple of two. * @param samples Samples in interleaved stereo PCM16 format.
* @param sample_count Number of samples.
*/ */
virtual void EnqueueSamples(const std::vector<s16>& samples) = 0; virtual void EnqueueSamples(const s16* samples, size_t sample_count) = 0;
/// Samples enqueued that have not been played yet. /// Samples enqueued that have not been played yet.
virtual std::size_t SamplesInQueue() const = 0; virtual std::size_t SamplesInQueue() const = 0;