@@ -25,6 +25,7 @@ @interface SGVideoRenderer () <MTKViewDelegate>
2525 NSUInteger framesFetched;
2626 NSUInteger framesDisplayed;
2727 NSTimeInterval currentFrameEndTime;
28+ NSTimeInterval currentFrameBeginTime;
2829 } _flags;
2930 SGCapacity _capacity;
3031}
@@ -198,6 +199,8 @@ - (BOOL)close
198199 self->_flags .hasNewFrame = NO ;
199200 self->_flags .framesFetched = 0 ;
200201 self->_flags .framesDisplayed = 0 ;
202+ self->_flags .currentFrameEndTime = 0 ;
203+ self->_flags .currentFrameBeginTime = 0 ;
201204 self->_capacity = SGCapacityCreate ();
202205 return ^{b1 ();};
203206 }, ^BOOL (SGBlock block) {
@@ -252,6 +255,8 @@ - (BOOL)flush
252255 self->_flags .hasNewFrame = NO ;
253256 self->_flags .framesFetched = 0 ;
254257 self->_flags .framesDisplayed = 0 ;
258+ self->_flags .currentFrameEndTime = 0 ;
259+ self->_flags .currentFrameBeginTime = 0 ;
255260 return nil ;
256261 }, ^BOOL (SGBlock block) {
257262 self->_metalView .paused = NO ;
@@ -326,6 +331,7 @@ - (void)fetchTimerHandler
326331 self->_currentFrame = newFrame;
327332 self->_flags .hasNewFrame = YES ;
328333 self->_flags .framesFetched += 1 ;
334+ self->_flags .currentFrameBeginTime = currentMediaTime;
329335 self->_flags .currentFrameEndTime = currentMediaTime + CMTimeGetSeconds (duration);
330336 if (self->_frameOutput ) {
331337 [newFrame lock ];
@@ -338,7 +344,12 @@ - (void)fetchTimerHandler
338344 [self ->_clock setVideoTime: time];
339345 };
340346 } else if (currentMediaTime < self->_flags .currentFrameEndTime ) {
347+ CMTime time = self->_currentFrame .timeStamp ;
348+ time = CMTimeAdd (time, SGCMTimeMakeWithSeconds (currentMediaTime - self->_flags .currentFrameBeginTime ));
341349 capacity.duration = SGCMTimeMakeWithSeconds (self->_flags .currentFrameEndTime - currentMediaTime);
350+ b2 = ^{
351+ [self ->_clock setVideoTime: time];
352+ };
342353 }
343354 if (!SGCapacityIsEqual (self->_capacity , capacity)) {
344355 self->_capacity = capacity;
0 commit comments