test new fix
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user