reuse the stereo Opus encoder across connections
Every connect built a fresh stereo encoder for file playback. Each one holds a little under a megabyte of encoder state, so on a flaky link that is close to a megabyte of churn per reconnect for no benefit; the encoder is already reset when file playback ends. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
5cdb2684b5
commit
0d62f745ca
@@ -70,6 +70,10 @@ type Barnard struct {
|
|||||||
// Added for file playback
|
// Added for file playback
|
||||||
FileStream *fileplayback.Player
|
FileStream *fileplayback.Player
|
||||||
FileStreamMutex sync.Mutex
|
FileStreamMutex sync.Mutex
|
||||||
|
// stereoEncoder is reused across connections. Each one holds a little
|
||||||
|
// under a megabyte of encoder state, so building a fresh one per
|
||||||
|
// reconnect is pure churn; it is reset when file playback ends.
|
||||||
|
stereoEncoder gumble.AudioEncoder
|
||||||
|
|
||||||
// Added for tone test mode (bypasses all soundcard/OpenAL)
|
// Added for tone test mode (bypasses all soundcard/OpenAL)
|
||||||
ToneTest bool
|
ToneTest bool
|
||||||
|
|||||||
@@ -108,8 +108,12 @@ func (b *Barnard) connect(reconnect bool) bool {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
// Initialize stereo encoder for file playback
|
// Initialize stereo encoder for file playback, reusing the one built for
|
||||||
b.Client.SetStereoEncoder(opus.NewStereoEncoder())
|
// the previous connection rather than allocating another.
|
||||||
|
if b.stereoEncoder == nil {
|
||||||
|
b.stereoEncoder = opus.NewStereoEncoder()
|
||||||
|
}
|
||||||
|
b.Client.SetStereoEncoder(b.stereoEncoder)
|
||||||
|
|
||||||
// Initialize file player
|
// Initialize file player
|
||||||
b.FileStreamMutex.Lock()
|
b.FileStreamMutex.Lock()
|
||||||
|
|||||||
Reference in New Issue
Block a user