From 32543bd5aff9206ebb8f658b2539183a2e4e06e5 Mon Sep 17 00:00:00 2001 From: Toby Harris Date: Mon, 18 Aug 2014 00:19:14 +0100 Subject: [PATCH] Loop Mode implemented --- v002 Media Tools/v002_Movie_PlayerPlugIn.m | 34 ++++++++++++++++++---- 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/v002 Media Tools/v002_Movie_PlayerPlugIn.m b/v002 Media Tools/v002_Movie_PlayerPlugIn.m index 623b0cc..dcde8b9 100644 --- a/v002 Media Tools/v002_Movie_PlayerPlugIn.m +++ b/v002 Media Tools/v002_Movie_PlayerPlugIn.m @@ -56,7 +56,7 @@ + (NSDictionary *)attributesForPropertyPortWithKey:(NSString *)key return @{QCPortAttributeNameKey:@"Rate", QCPortAttributeDefaultValueKey:[NSNumber numberWithFloat:1.0]}; if([key isEqualToString:@"inputLoopMode"]) - return @{QCPortAttributeNameKey : @"Playhead", + return @{QCPortAttributeNameKey : @"Loop Mode", QCPortAttributeMenuItemsKey : @[@"Loop", @"Palindrome", @"No Loop"], QCPortAttributeMinimumValueKey : [NSNumber numberWithUnsignedInteger:0], QCPortAttributeDefaultValueKey : [NSNumber numberWithUnsignedInteger:0], @@ -260,13 +260,35 @@ - (BOOL)execute:(id )context atTime:(NSTimeInterval)time withAr // output port values BOOL end = self.movieDidEnd; - if(end) + if(end) + { + self.outputMovieDidEnd = YES; + self.movieDidEnd = NO; + + // QCPortAttributeMenuItemsKey : @[@"Loop", @"Palindrome", @"No Loop"], + if (self.inputLoopMode == 0) + { + [[player currentItem] seekToTime:kCMTimeZero]; + [player setRate:self.inputRate]; + } + else if (self.inputLoopMode == 1) + { + // Rate is already zero by the time we get here. + // Don't rely on reversePlaybackEndTime comparison + if (CMTimeCompare([player currentTime], kCMTimeZero) > 0) + { + [player setRate: -1.0 * fabs(self.inputRate)]; + } + else + { + [player setRate: fabs(self.inputRate)]; + } + } + } + else { - self.outputMovieDidEnd = YES; - self.movieDidEnd = NO; + self.outputMovieDidEnd = NO; } - else - self.outputMovieDidEnd = NO; return YES; }