Remove IAudioRenderer::testAudio() and just use IAudioRenderer::prepareForPlayback() instead

This commit is contained in:
Cameron Gutman 2018-10-01 19:49:08 -07:00
parent 209b4a1b02
commit 8dddcd04d5
6 changed files with 19 additions and 109 deletions

View file

@ -27,7 +27,25 @@ bool Session::testAudio(int audioConfiguration)
return false;
}
bool ret = audioRenderer->testAudio(audioConfiguration);
// Build a fake OPUS_MULTISTREAM_CONFIGURATION to give
// the renderer the channel count and sample rate.
OPUS_MULTISTREAM_CONFIGURATION opusConfig = {};
opusConfig.sampleRate = 48000;
switch (audioConfiguration)
{
case AUDIO_CONFIGURATION_STEREO:
opusConfig.channelCount = 2;
break;
case AUDIO_CONFIGURATION_51_SURROUND:
opusConfig.channelCount = 6;
break;
default:
SDL_assert(false);
return false;
}
bool ret = audioRenderer->prepareForPlayback(&opusConfig);
delete audioRenderer;

View file

@ -109,69 +109,6 @@ void PortAudioRenderer::submitAudio(short* audioBuffer, int audioSize)
}
}
bool PortAudioRenderer::testAudio(int audioConfiguration) const
{
PaStreamParameters params = {};
PaDeviceIndex outputDeviceIndex = Pa_GetDefaultOutputDevice();
if (outputDeviceIndex == paNoDevice) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,
"No output device available");
return false;
}
const PaDeviceInfo* deviceInfo = Pa_GetDeviceInfo(outputDeviceIndex);
if (deviceInfo == nullptr) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,
"Pa_GetDeviceInfo() failed");
return false;
}
switch (audioConfiguration)
{
case AUDIO_CONFIGURATION_STEREO:
params.channelCount = 2;
break;
case AUDIO_CONFIGURATION_51_SURROUND:
params.channelCount = 6;
break;
default:
SDL_assert(false);
return false;
}
params.sampleFormat = paInt16;
params.device = outputDeviceIndex;
params.suggestedLatency = deviceInfo->defaultLowOutputLatency;
// We used to just use Pa_IsFormatSupported() but there are cases
// where Pa_IsFormatSupported() will fail but when we actually
// call Pa_OpenStream(), it fails with device unavailable.
PaStream* stream;
PaError error = Pa_OpenStream(&stream, nullptr, &params,
48000,
SAMPLES_PER_FRAME,
paNoFlag,
nullptr, nullptr);
if (error != paNoError) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,
"Pa_OpenStream() failed: %s",
Pa_GetErrorText(error));
return false;
}
error = Pa_StartStream(stream);
if (error != paNoError) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,
"Pa_StartStream() failed: %s",
Pa_GetErrorText(error));
}
Pa_CloseStream(stream);
return error == paNoError;
}
int PortAudioRenderer::detectAudioConfiguration() const
{
const PaDeviceInfo* deviceInfo = Pa_GetDeviceInfo(Pa_GetDefaultOutputDevice());

View file

@ -20,8 +20,6 @@ public:
virtual void submitAudio(short* audioBuffer, int audioSize);
virtual bool testAudio(int audioConfiguration) const;
virtual int detectAudioConfiguration() const;
virtual void adjustOpusChannelMapping(OPUS_MULTISTREAM_CONFIGURATION* opusConfig) const;

View file

@ -16,7 +16,5 @@ public:
virtual void submitAudio(short* audioBuffer, int audioSize) = 0;
virtual bool testAudio(int audioConfiguration) const = 0;
virtual int detectAudioConfiguration() const = 0;
};

View file

@ -19,8 +19,6 @@ public:
virtual void submitAudio(short* audioBuffer, int audioSize);
virtual bool testAudio(int audioConfiguration) const;
virtual int detectAudioConfiguration() const;
virtual void adjustOpusChannelMapping(OPUS_MULTISTREAM_CONFIGURATION* opusConfig) const;

View file

@ -56,45 +56,6 @@ void SdlAudioRenderer::adjustOpusChannelMapping(OPUS_MULTISTREAM_CONFIGURATION*)
// The default mapping is fine for SDL
}
bool SdlAudioRenderer::testAudio(int audioConfiguration) const
{
SDL_AudioSpec want, have;
SDL_AudioDeviceID dev;
SDL_zero(want);
want.freq = 48000;
want.format = AUDIO_S16;
want.samples = SAMPLES_PER_FRAME;
switch (audioConfiguration) {
case AUDIO_CONFIGURATION_STEREO:
want.channels = 2;
break;
case AUDIO_CONFIGURATION_51_SURROUND:
want.channels = 6;
break;
default:
SDL_assert(false);
return false;
}
// Test audio device for functionality
dev = SDL_OpenAudioDevice(NULL, 0, &want, &have, 0);
if (dev == 0) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,
"Audio test - Failed to open audio device: %s",
SDL_GetError());
return false;
}
SDL_CloseAudioDevice(dev);
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION,
"Audio test - Successful with %d channels",
want.channels);
return true;
}
SdlAudioRenderer::SdlAudioRenderer()
: m_AudioDevice(0),
m_ChannelCount(0),