@@ -78,6 +78,7 @@ import {wrapWithErrorHandling} from './wrap-with-error-handling';
78
78
export type StitchingState = 'encoding' | 'muxing' ;
79
79
80
80
const SLOWEST_FRAME_COUNT = 10 ;
81
+ const MAX_RECENT_FRAME_TIMINGS = 50 ;
81
82
82
83
export type SlowFrame = { frame : number ; time : number } ;
83
84
@@ -322,7 +323,7 @@ const internalRenderMediaRaw = ({
322
323
let encodedDoneIn : number | null = null ;
323
324
let cancelled = false ;
324
325
let renderEstimatedTime = 0 ;
325
- let totalTimeSpentOnFrames = 0 ;
326
+ const recentFrameTimings : number [ ] = [ ] ;
326
327
327
328
const renderStart = Date . now ( ) ;
328
329
@@ -606,8 +607,18 @@ const internalRenderMediaRaw = ({
606
607
) => {
607
608
renderedFrames = frame ;
608
609
609
- totalTimeSpentOnFrames += timeToRenderInMilliseconds ;
610
- const newAverage = totalTimeSpentOnFrames / renderedFrames ;
610
+ // Track recent frame timings (at most 50)
611
+ recentFrameTimings . push ( timeToRenderInMilliseconds ) ;
612
+ if ( recentFrameTimings . length > MAX_RECENT_FRAME_TIMINGS ) {
613
+ recentFrameTimings . shift ( ) ;
614
+ }
615
+
616
+ // Calculate average using only recent timings for better estimation
617
+ const recentTimingsSum = recentFrameTimings . reduce (
618
+ ( sum , time ) => sum + time ,
619
+ 0 ,
620
+ ) ;
621
+ const newAverage = recentTimingsSum / recentFrameTimings . length ;
611
622
612
623
const remainingFrames = totalFramesToRender - renderedFrames ;
613
624
0 commit comments