| @@ -8,7 +8,6 @@ import ( | |||
| "sdr-visual-suite/internal/classifier" | |||
| "sdr-visual-suite/internal/demod" | |||
| "sdr-visual-suite/internal/demod/gpudemod" | |||
| "sdr-visual-suite/internal/detector" | |||
| "sdr-visual-suite/internal/dsp" | |||
| ) | |||
| @@ -31,40 +30,11 @@ func (m *Manager) demodAndWrite(dir string, ev detector.Event, iq []complex64, f | |||
| var inputRate int | |||
| gpu := m.gpuEngine() | |||
| if gpu != nil { | |||
| var gpuMode gpudemod.DemodType | |||
| var useGPU bool | |||
| switch name { | |||
| case "NFM": | |||
| gpuMode, useGPU = gpudemod.DemodNFM, true | |||
| case "WFM": | |||
| gpuMode, useGPU = gpudemod.DemodWFM, true | |||
| case "AM": | |||
| gpuMode, useGPU = gpudemod.DemodAM, true | |||
| case "USB": | |||
| gpuMode, useGPU = gpudemod.DemodUSB, true | |||
| case "LSB": | |||
| gpuMode, useGPU = gpudemod.DemodLSB, true | |||
| case "CW": | |||
| gpuMode, useGPU = gpudemod.DemodCW, true | |||
| } | |||
| gpuMode, useGPU := gpuModeFor(name) | |||
| if useGPU { | |||
| if gpuAudio, gpuRate, err := gpu.DemodFused(iq, offset, bw, gpuMode); err == nil { | |||
| if gpuAudio, gpuRate, ok := tryGPUAudio(gpu, name, iq, offset, bw, gpuMode); ok { | |||
| audio = gpuAudio | |||
| inputRate = gpuRate | |||
| 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 := gpu.Demod(iq, offset, bw, gpuMode); err == nil { | |||
| audio = gpuAudio | |||
| inputRate = gpuRate | |||
| if gpu.LastDemodUsedGPU() { | |||
| log.Printf("gpudemod: legacy GPU demod used for event %d (%s)", ev.ID, name) | |||
| } | |||
| } else { | |||
| log.Printf("gpudemod: legacy GPU demod failed for event %d (%s): %v", ev.ID, name, err) | |||
| } | |||
| } | |||
| } | |||
| } | |||
| @@ -8,7 +8,6 @@ import ( | |||
| "time" | |||
| "sdr-visual-suite/internal/demod" | |||
| "sdr-visual-suite/internal/demod/gpudemod" | |||
| "sdr-visual-suite/internal/dsp" | |||
| ) | |||
| @@ -48,36 +47,11 @@ func (m *Manager) DemodLive(centerHz float64, bw float64, mode string, seconds i | |||
| var inputRate int | |||
| gpu := m.gpuEngine() | |||
| if gpu != nil { | |||
| var gpuMode gpudemod.DemodType | |||
| var useGPU bool | |||
| switch name { | |||
| case "NFM": | |||
| gpuMode, useGPU = gpudemod.DemodNFM, true | |||
| case "WFM": | |||
| gpuMode, useGPU = gpudemod.DemodWFM, true | |||
| case "AM": | |||
| gpuMode, useGPU = gpudemod.DemodAM, true | |||
| case "USB": | |||
| gpuMode, useGPU = gpudemod.DemodUSB, true | |||
| case "LSB": | |||
| gpuMode, useGPU = gpudemod.DemodLSB, true | |||
| case "CW": | |||
| gpuMode, useGPU = gpudemod.DemodCW, true | |||
| } | |||
| gpuMode, useGPU := gpuModeFor(name) | |||
| if useGPU { | |||
| if gpuAudio, gpuRate, err := gpu.DemodFused(segment, offset, bw, gpuMode); err == nil { | |||
| if gpuAudio, gpuRate, ok := tryGPUAudio(gpu, name, segment, offset, bw, gpuMode); ok { | |||
| 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 := gpu.Demod(segment, offset, bw, gpuMode); err == nil { | |||
| audio = gpuAudio | |||
| inputRate = gpuRate | |||
| log.Printf("gpudemod: legacy GPU live demod used (%s)", name) | |||
| } else { | |||
| log.Printf("gpudemod: legacy GPU live demod failed (%s): %v", name, err) | |||
| } | |||
| } | |||
| } | |||
| } | |||
| @@ -0,0 +1,26 @@ | |||
| package recorder | |||
| import ( | |||
| "log" | |||
| "sdr-visual-suite/internal/demod/gpudemod" | |||
| ) | |||
| func tryGPUAudio(gpu *gpudemod.Engine, label string, iq []complex64, offset float64, bw float64, gpuMode gpudemod.DemodType) ([]float32, int, bool) { | |||
| if gpu == nil { | |||
| return nil, 0, false | |||
| } | |||
| if gpuAudio, gpuRate, err := gpu.DemodFused(iq, offset, bw, gpuMode); err == nil { | |||
| log.Printf("gpudemod: fused GPU demod used (%s)", label) | |||
| return gpuAudio, gpuRate, true | |||
| } else { | |||
| log.Printf("gpudemod: fused GPU demod failed (%s): %v", label, err) | |||
| } | |||
| if gpuAudio, gpuRate, err := gpu.Demod(iq, offset, bw, gpuMode); err == nil { | |||
| log.Printf("gpudemod: legacy GPU demod used (%s)", label) | |||
| return gpuAudio, gpuRate, true | |||
| } else { | |||
| log.Printf("gpudemod: legacy GPU demod failed (%s): %v", label, err) | |||
| } | |||
| return nil, 0, false | |||
| } | |||