Procházet zdrojové kódy

Unify recorder GPU demod fallback logic

master
Jan Svabenik před 2 dny
rodič
revize
412459bc91
3 změnil soubory, kde provedl 30 přidání a 60 odebrání
  1. +2
    -32
      internal/recorder/demod.go
  2. +2
    -28
      internal/recorder/demod_live.go
  3. +26
    -0
      internal/recorder/gpu_audio.go

+ 2
- 32
internal/recorder/demod.go Zobrazit soubor

@@ -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)
}
}
}
}


+ 2
- 28
internal/recorder/demod_live.go Zobrazit soubor

@@ -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)
}
}
}
}


+ 26
- 0
internal/recorder/gpu_audio.go Zobrazit soubor

@@ -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
}

Načítá se…
Zrušit
Uložit