| @@ -29,7 +29,8 @@ func (m *Manager) demodAndWrite(dir string, ev detector.Event, iq []complex64, f | |||||
| offset := ev.CenterHz - m.centerHz | offset := ev.CenterHz - m.centerHz | ||||
| var audio []float32 | var audio []float32 | ||||
| var inputRate int | var inputRate int | ||||
| if m.gpuDemod != nil { | |||||
| gpu := m.gpuEngine() | |||||
| if gpu != nil { | |||||
| var gpuMode gpudemod.DemodType | var gpuMode gpudemod.DemodType | ||||
| var useGPU bool | var useGPU bool | ||||
| switch name { | switch name { | ||||
| @@ -47,18 +48,18 @@ func (m *Manager) demodAndWrite(dir string, ev detector.Event, iq []complex64, f | |||||
| gpuMode, useGPU = gpudemod.DemodCW, true | gpuMode, useGPU = gpudemod.DemodCW, true | ||||
| } | } | ||||
| if useGPU { | 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 | audio = gpuAudio | ||||
| inputRate = gpuRate | inputRate = gpuRate | ||||
| if m.gpuDemod.LastDemodUsedGPU() { | |||||
| if gpu.LastDemodUsedGPU() { | |||||
| log.Printf("gpudemod: fused GPU demod used for event %d (%s)", ev.ID, name) | log.Printf("gpudemod: fused GPU demod used for event %d (%s)", ev.ID, name) | ||||
| } | } | ||||
| } else { | } else { | ||||
| log.Printf("gpudemod: fused GPU demod failed for event %d (%s): %v", ev.ID, name, err) | 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 | audio = gpuAudio | ||||
| inputRate = gpuRate | inputRate = gpuRate | ||||
| if m.gpuDemod.LastDemodUsedGPU() { | |||||
| if gpu.LastDemodUsedGPU() { | |||||
| log.Printf("gpudemod: legacy GPU demod used for event %d (%s)", ev.ID, name) | log.Printf("gpudemod: legacy GPU demod used for event %d (%s)", ev.ID, name) | ||||
| } | } | ||||
| } else { | } else { | ||||
| @@ -46,7 +46,8 @@ func (m *Manager) DemodLive(centerHz float64, bw float64, mode string, seconds i | |||||
| var audio []float32 | var audio []float32 | ||||
| var inputRate int | var inputRate int | ||||
| if m.gpuDemod != nil { | |||||
| gpu := m.gpuEngine() | |||||
| if gpu != nil { | |||||
| var gpuMode gpudemod.DemodType | var gpuMode gpudemod.DemodType | ||||
| var useGPU bool | var useGPU bool | ||||
| switch name { | switch name { | ||||
| @@ -64,13 +65,13 @@ func (m *Manager) DemodLive(centerHz float64, bw float64, mode string, seconds i | |||||
| gpuMode, useGPU = gpudemod.DemodCW, true | gpuMode, useGPU = gpudemod.DemodCW, true | ||||
| } | } | ||||
| if useGPU { | 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 | audio = gpuAudio | ||||
| inputRate = gpuRate | inputRate = gpuRate | ||||
| log.Printf("gpudemod: fused GPU live demod used (%s)", name) | log.Printf("gpudemod: fused GPU live demod used (%s)", name) | ||||
| } else { | } else { | ||||
| log.Printf("gpudemod: fused GPU live demod failed (%s): %v", name, err) | 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 | audio = gpuAudio | ||||
| inputRate = gpuRate | inputRate = gpuRate | ||||
| log.Printf("gpudemod: legacy GPU live demod used (%s)", name) | log.Printf("gpudemod: legacy GPU live demod used (%s)", name) | ||||
| @@ -120,6 +120,12 @@ func (m *Manager) initGPUDemod(sampleRate int, blockSize int) { | |||||
| m.initGPUDemodLocked(sampleRate, blockSize) | 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) { | func (m *Manager) initGPUDemodLocked(sampleRate int, blockSize int) { | ||||
| if m.gpuDemod != nil { | if m.gpuDemod != nil { | ||||
| m.gpuDemod.Close() | m.gpuDemod.Close() | ||||