audio: switch waveout backend to pull rendering
This commit is contained in:
@@ -23,23 +23,40 @@ namespace {
|
||||
|
||||
#ifdef _WIN32
|
||||
|
||||
TEST(WaveOutBackend, ProcessAudioCopiesOnlyRequestedSamplesIntoPendingMixBuffer) {
|
||||
TEST(WaveOutBackend, RenderCallbackCanDrivePcm16ConversionForPullModel) {
|
||||
WaveOut::WaveOutBackend backend;
|
||||
backend.m_pendingMixBuffer.assign(8, 1.0f);
|
||||
backend.m_config.bufferSize = 2;
|
||||
backend.m_config.channels = 2;
|
||||
backend.m_config.sampleRate = 48000;
|
||||
|
||||
float input[] = {0.25f, -0.5f, 0.75f, -1.0f};
|
||||
backend.ProcessAudio(input, 2, 2, 48000);
|
||||
bool callbackInvoked = false;
|
||||
backend.SetRenderCallback(
|
||||
[&callbackInvoked](float* buffer, uint32 frameCount, uint32 channels, uint32 sampleRate) {
|
||||
callbackInvoked = true;
|
||||
EXPECT_EQ(frameCount, 2u);
|
||||
EXPECT_EQ(channels, 2u);
|
||||
EXPECT_EQ(sampleRate, 48000u);
|
||||
|
||||
ASSERT_EQ(backend.m_pendingMixBuffer.size(), 8u);
|
||||
EXPECT_TRUE(backend.m_hasPendingMix);
|
||||
EXPECT_FLOAT_EQ(backend.m_pendingMixBuffer[0], 0.25f);
|
||||
EXPECT_FLOAT_EQ(backend.m_pendingMixBuffer[1], -0.5f);
|
||||
EXPECT_FLOAT_EQ(backend.m_pendingMixBuffer[2], 0.75f);
|
||||
EXPECT_FLOAT_EQ(backend.m_pendingMixBuffer[3], -1.0f);
|
||||
EXPECT_FLOAT_EQ(backend.m_pendingMixBuffer[4], 0.0f);
|
||||
EXPECT_FLOAT_EQ(backend.m_pendingMixBuffer[5], 0.0f);
|
||||
EXPECT_FLOAT_EQ(backend.m_pendingMixBuffer[6], 0.0f);
|
||||
EXPECT_FLOAT_EQ(backend.m_pendingMixBuffer[7], 0.0f);
|
||||
buffer[0] = 0.25f;
|
||||
buffer[1] = -0.5f;
|
||||
buffer[2] = 0.75f;
|
||||
buffer[3] = -1.0f;
|
||||
});
|
||||
|
||||
backend.m_renderBuffer.assign(4, 0.0f);
|
||||
ASSERT_TRUE(static_cast<bool>(backend.m_renderCallback));
|
||||
backend.m_renderCallback(backend.m_renderBuffer.data(), 2, 2, 48000);
|
||||
|
||||
std::vector<int16_t> output(4, 0);
|
||||
WaveOut::WaveOutBackend::FillPcm16Buffer(output, backend.m_renderBuffer);
|
||||
|
||||
EXPECT_TRUE(backend.UsesPullModel());
|
||||
EXPECT_TRUE(callbackInvoked);
|
||||
ASSERT_EQ(output.size(), 4u);
|
||||
EXPECT_EQ(output[0], 8191);
|
||||
EXPECT_EQ(output[1], -16383);
|
||||
EXPECT_EQ(output[2], 24575);
|
||||
EXPECT_EQ(output[3], -32767);
|
||||
}
|
||||
|
||||
TEST(WaveOutBackend, SetDeviceAcceptsDefaultDeviceBeforeInitialize) {
|
||||
|
||||
Reference in New Issue
Block a user