private KeyFrameResolver(IList keyFrames, TimeSpan duration, ISegmentLengthProvider segmentLengthProvider) { _frameCount = keyFrames?.Count ?? 0; _keyFrames = new ResolvedKeyFrame <TKeyFrame> [_frameCount]; _duration = duration; _segmentLengthProvider = segmentLengthProvider ?? throw new ArgumentNullException(nameof(segmentLengthProvider)); for (int i = 0; i < _frameCount; i++) { TKeyFrame currentFrame = (TKeyFrame)keyFrames[i]; _keyFrames[i] = new ResolvedKeyFrame <TKeyFrame>(currentFrame); } }
public static IReadOnlyList <ResolvedKeyFrame <TKeyFrame> > ResolveKeyFrames( IList keyFrames, TimeSpan duration, ISegmentLengthProvider segmentLengthProvider) { if (keyFrames == null || keyFrames.Count == 0) { return(null); } var resolver = new KeyFrameResolver <TKeyFrame>(keyFrames, duration, segmentLengthProvider); resolver.ResolveTimeSpanAndPercentKeyFrames(); resolver.ResolveLastKeyFrame(); resolver.ResolveFirstKeyFrame(); resolver.ResolveUniformKeyFrames(); resolver.ResolvePacedKeyFrames(); resolver.SortKeyFrames(); return(new ReadOnlyCollection <ResolvedKeyFrame <TKeyFrame> >(resolver._keyFrames)); }