1
0
mirror of https://github.com/qTox/qTox.git synced 2024-03-22 14:00:36 +08:00

Fix some nullptr dereferences in Audio

Fixes #859
This commit is contained in:
Tux3 / Mlkj / !Lev.uXFMLA 2014-11-26 23:21:57 +01:00
parent 1b7193fb1f
commit a083d8dbc6
No known key found for this signature in database
GPG Key ID: 7E086DD661263264

View File

@ -60,6 +60,7 @@ void Audio::openInput(const QString& inDevDescr)
{ {
auto* tmp = alInDev; auto* tmp = alInDev;
alInDev = nullptr; alInDev = nullptr;
if (tmp)
alcCaptureCloseDevice(tmp); alcCaptureCloseDevice(tmp);
int stereoFlag = av_DefaultSettings.audio_channels==1 ? AL_FORMAT_MONO16 : AL_FORMAT_STEREO16; int stereoFlag = av_DefaultSettings.audio_channels==1 ? AL_FORMAT_MONO16 : AL_FORMAT_STEREO16;
if (inDevDescr.isEmpty()) if (inDevDescr.isEmpty())
@ -78,7 +79,7 @@ void Audio::openInput(const QString& inDevDescr)
Core::getInstance()->resetCallSources(); // Force to regen each group call's sources Core::getInstance()->resetCallSources(); // Force to regen each group call's sources
// Restart the capture if necessary // Restart the capture if necessary
if (userCount.load() != 0) if (userCount.load() != 0 && alInDev)
alcCaptureStart(alInDev); alcCaptureStart(alInDev);
} }
@ -86,6 +87,7 @@ void Audio::openOutput(const QString& outDevDescr)
{ {
auto* tmp = alOutDev; auto* tmp = alOutDev;
alOutDev = nullptr; alOutDev = nullptr;
if (tmp)
alcCloseDevice(tmp); alcCloseDevice(tmp);
if (outDevDescr.isEmpty()) if (outDevDescr.isEmpty())
alOutDev = alcOpenDevice(nullptr); alOutDev = alcOpenDevice(nullptr);
@ -97,6 +99,7 @@ void Audio::openOutput(const QString& outDevDescr)
} }
else else
{ {
if (alContext)
alcDestroyContext(alContext); alcDestroyContext(alContext);
alContext=alcCreateContext(alOutDev,nullptr); alContext=alcCreateContext(alOutDev,nullptr);
if (!alcMakeContextCurrent(alContext)) if (!alcMakeContextCurrent(alContext))