From b2a1d2f846af3bdd2671fc997028dc8e9be41a58 Mon Sep 17 00:00:00 2001 From: "Brandon McGinty (deepseek)" Date: Sat, 8 Aug 2026 23:45:55 -0400 Subject: [PATCH] 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. --- gumble/gumbleopenal/stream.go | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/gumble/gumbleopenal/stream.go b/gumble/gumbleopenal/stream.go index b9ca773..059dfbe 100644 --- a/gumble/gumbleopenal/stream.go +++ b/gumble/gumbleopenal/stream.go @@ -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 {