test new fix

This commit is contained in:
KingKDot
2026-05-16 00:35:50 -05:00
parent 2697e289e2
commit 089cf20bed
+23 -2
View File
@@ -131,11 +131,24 @@ func CaptureAndSend(ctx context.Context, env *rt.Env) error {
consecutiveCaptureFails.Store(0) consecutiveCaptureFails.Store(0)
captureDur := time.Since(t0) captureDur := time.Since(t0)
willSendViaWebRTC := blockCodec() == "h264" && webrtcpub.IsActive(webrtcpub.KindDesktop)
var slotAcquired bool
if !willSendViaWebRTC {
if !AcquireFrameSlot() {
PutRGBA(img)
return nil
}
slotAcquired = true
}
quality := jpegQuality() quality := jpegQuality()
frame, encodeDur, err := buildFrame(img, display, quality) frame, encodeDur, err := buildFrame(img, display, quality)
PutRGBA(img) PutRGBA(img)
img = nil img = nil
if err != nil { if err != nil {
if slotAcquired {
ReleaseFrameSlot()
}
return err return err
} }
now := time.Now() now := time.Now()
@@ -145,6 +158,9 @@ func CaptureAndSend(ctx context.Context, env *rt.Env) error {
} }
frame.Header.FPS = fps frame.Header.FPS = fps
if ctx.Err() != nil { if ctx.Err() != nil {
if slotAcquired {
ReleaseFrameSlot()
}
return nil return nil
} }
if frame.Header.Format == "h264" && webrtcpub.IsActive(webrtcpub.KindDesktop) { if frame.Header.Format == "h264" && webrtcpub.IsActive(webrtcpub.KindDesktop) {
@@ -155,6 +171,9 @@ func CaptureAndSend(ctx context.Context, env *rt.Env) error {
if werr := webrtcpub.WriteH264(webrtcpub.KindDesktop, frame.Data, dur); werr != nil { if werr := webrtcpub.WriteH264(webrtcpub.KindDesktop, frame.Data, dur); werr != nil {
log.Printf("webrtc: write h264 failed: %v", werr) log.Printf("webrtc: write h264 failed: %v", werr)
} }
if slotAcquired {
ReleaseFrameSlot()
}
statFrames.Add(1) statFrames.Add(1)
statCapNs.Add(captureDur.Nanoseconds()) statCapNs.Add(captureDur.Nanoseconds())
statEncNs.Add(encodeDur.Nanoseconds()) statEncNs.Add(encodeDur.Nanoseconds())
@@ -162,8 +181,10 @@ func CaptureAndSend(ctx context.Context, env *rt.Env) error {
statBytes.Add(int64(len(frame.Data))) statBytes.Add(int64(len(frame.Data)))
return nil return nil
} }
if !AcquireFrameSlot() { if !slotAcquired {
return nil // backpressure: server hasn't acked previous frames if !AcquireFrameSlot() {
return nil
}
} }
sendStart := time.Now() sendStart := time.Now()
err = wire.WriteMsg(ctx, env.Conn, frame) err = wire.WriteMsg(ctx, env.Conn, frame)