diff --git a/internal/recorder/demod.go b/internal/recorder/demod.go index 57253ff..23741af 100644 --- a/internal/recorder/demod.go +++ b/internal/recorder/demod.go @@ -29,7 +29,8 @@ func (m *Manager) demodAndWrite(dir string, ev detector.Event, iq []complex64, f offset := ev.CenterHz - m.centerHz var audio []float32 var inputRate int - if m.gpuDemod != nil { + gpu := m.gpuEngine() + if gpu != nil { var gpuMode gpudemod.DemodType var useGPU bool switch name { @@ -47,18 +48,18 @@ func (m *Manager) demodAndWrite(dir string, ev detector.Event, iq []complex64, f gpuMode, useGPU = gpudemod.DemodCW, true } if useGPU { - if gpuAudio, gpuRate, err := m.gpuDemod.DemodFused(iq, offset, bw, gpuMode); err == nil { + if gpuAudio, gpuRate, err := gpu.DemodFused(iq, offset, bw, gpuMode); err == nil { audio = gpuAudio inputRate = gpuRate - if m.gpuDemod.LastDemodUsedGPU() { + if gpu.LastDemodUsedGPU() { log.Printf("gpudemod: fused GPU demod used for event %d (%s)", ev.ID, name) } } else { log.Printf("gpudemod: fused GPU demod failed for event %d (%s): %v", ev.ID, name, err) - if gpuAudio, gpuRate, err := m.gpuDemod.Demod(iq, offset, bw, gpuMode); err == nil { + if gpuAudio, gpuRate, err := gpu.Demod(iq, offset, bw, gpuMode); err == nil { audio = gpuAudio inputRate = gpuRate - if m.gpuDemod.LastDemodUsedGPU() { + if gpu.LastDemodUsedGPU() { log.Printf("gpudemod: legacy GPU demod used for event %d (%s)", ev.ID, name) } } else { diff --git a/internal/recorder/demod_live.go b/internal/recorder/demod_live.go index 0c473c0..d27ef3c 100644 --- a/internal/recorder/demod_live.go +++ b/internal/recorder/demod_live.go @@ -46,7 +46,8 @@ func (m *Manager) DemodLive(centerHz float64, bw float64, mode string, seconds i var audio []float32 var inputRate int - if m.gpuDemod != nil { + gpu := m.gpuEngine() + if gpu != nil { var gpuMode gpudemod.DemodType var useGPU bool switch name { @@ -64,13 +65,13 @@ func (m *Manager) DemodLive(centerHz float64, bw float64, mode string, seconds i gpuMode, useGPU = gpudemod.DemodCW, true } if useGPU { - if gpuAudio, gpuRate, err := m.gpuDemod.DemodFused(segment, offset, bw, gpuMode); err == nil { + if gpuAudio, gpuRate, err := gpu.DemodFused(segment, offset, bw, gpuMode); err == nil { audio = gpuAudio inputRate = gpuRate log.Printf("gpudemod: fused GPU live demod used (%s)", name) } else { log.Printf("gpudemod: fused GPU live demod failed (%s): %v", name, err) - if gpuAudio, gpuRate, err := m.gpuDemod.Demod(segment, offset, bw, gpuMode); err == nil { + if gpuAudio, gpuRate, err := gpu.Demod(segment, offset, bw, gpuMode); err == nil { audio = gpuAudio inputRate = gpuRate log.Printf("gpudemod: legacy GPU live demod used (%s)", name) diff --git a/internal/recorder/recorder.go b/internal/recorder/recorder.go index 6c77ef7..88a7298 100644 --- a/internal/recorder/recorder.go +++ b/internal/recorder/recorder.go @@ -120,6 +120,12 @@ func (m *Manager) initGPUDemod(sampleRate int, blockSize int) { m.initGPUDemodLocked(sampleRate, blockSize) } +func (m *Manager) gpuEngine() *gpudemod.Engine { + m.mu.RLock() + defer m.mu.RUnlock() + return m.gpuDemod +} + func (m *Manager) initGPUDemodLocked(sampleRate int, blockSize int) { if m.gpuDemod != nil { m.gpuDemod.Close()