Pārlūkot izejas kodu

Use synchronized GPU engine access in recorder demod paths

master
Jan Svabenik pirms 2 dienas
vecāks
revīzija
791c2c716d
3 mainītis faili ar 16 papildinājumiem un 8 dzēšanām
  1. +6
    -5
      internal/recorder/demod.go
  2. +4
    -3
      internal/recorder/demod_live.go
  3. +6
    -0
      internal/recorder/recorder.go

+ 6
- 5
internal/recorder/demod.go Parādīt failu

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


+ 4
- 3
internal/recorder/demod_live.go Parādīt failu

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


+ 6
- 0
internal/recorder/recorder.go Parādīt failu

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


Notiek ielāde…
Atcelt
Saglabāt