fix: add OpenAL device open logging and nil pointer safety

Add info-level logging showing which device OpenAL opens and with what
format. Also add nil checks for inputDevice/outputDevice pointers to
prevent panics when config fields are unset.
This commit is contained in:
Brandon McGinty (deepseek)
2026-08-08 23:45:55 -04:00
committed by Brandon McGinty
parent a24fca382d
commit b2a1d2f846
+23 -5
View File
@@ -85,19 +85,32 @@ func New(client *gumble.Client, inputDevice *string, outputDevice *string, test
frmsz = client.Config.AudioFrameSize()
}
devName := ""
if inputDevice != nil {
devName = *inputDevice
}
log.Info("OpenAL capture: requested device=%q rate=%d frameSize=%d", devName, gumble.AudioSampleRate, frmsz)
inputFormat := openal.FormatStereo16
sourceChannels := 2
idev := openal.CaptureOpenDevice(*inputDevice, gumble.AudioSampleRate, inputFormat, uint32(frmsz))
idev := openal.CaptureOpenDevice(devName, gumble.AudioSampleRate, inputFormat, uint32(frmsz))
if idev == nil {
log.Info("OpenAL capture: stereo failed, trying mono")
inputFormat = openal.FormatMono16
sourceChannels = 1
idev = openal.CaptureOpenDevice(*inputDevice, gumble.AudioSampleRate, inputFormat, uint32(frmsz))
idev = openal.CaptureOpenDevice(devName, gumble.AudioSampleRate, inputFormat, uint32(frmsz))
}
if idev == nil {
log.Error("OpenAL capture: failed to open device %q", devName)
return nil, ErrInputDevice
}
log.Info("OpenAL capture: opened device %q format=%v channels=%d", devName, inputFormat, sourceChannels)
odev := openal.OpenDevice(*outputDevice)
outName := ""
if outputDevice != nil {
outName = *outputDevice
}
odev := openal.OpenDevice(outName)
if odev == nil {
idev.CaptureCloseDevice()
return nil, ErrOutputDevice
@@ -486,14 +499,19 @@ func (s *Stream) sourceRoutine(inputDevice *string) {
interval := s.client.Config.AudioInterval
frameSize := s.client.Config.AudioFrameSize()
devName := ""
if inputDevice != nil {
devName = *inputDevice
}
if frameSize != s.sourceFrameSize {
s.deviceSource.CaptureCloseDevice()
s.sourceFrameSize = frameSize
s.deviceSource = openal.CaptureOpenDevice(*inputDevice, gumble.AudioSampleRate, s.sourceFormat, uint32(s.sourceFrameSize))
s.deviceSource = openal.CaptureOpenDevice(devName, gumble.AudioSampleRate, s.sourceFormat, uint32(s.sourceFrameSize))
if s.deviceSource == nil && s.sourceFormat == openal.FormatStereo16 {
s.sourceFormat = openal.FormatMono16
s.sourceChannels = 1
s.deviceSource = openal.CaptureOpenDevice(*inputDevice, gumble.AudioSampleRate, s.sourceFormat, uint32(s.sourceFrameSize))
s.deviceSource = openal.CaptureOpenDevice(devName, gumble.AudioSampleRate, s.sourceFormat, uint32(s.sourceFrameSize))
}
}
if s.deviceSource == nil {