Skip to content

Commit 730d29e

Browse files
committed
SGVideoRenderer: Add timing info callback.
1 parent 472d6cd commit 730d29e

1 file changed

Lines changed: 11 additions & 0 deletions

File tree

SGPlayer/Classes/Core/SGRenderer/SGVideoRenderer.m

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)