Added "inclusive" parameter to getPreviousKeyframe() and getNextKeyframe() in KeyframeList to define whether the next/previous keyframe may have the same timestamp as the realTime parameter

Fixed a bug in KeyframeList#getPositionOnPath where a non-inclusive getPreviousKeyframe call resulted in an incorrect position value
This commit is contained in:
CrushedPixel
2015-07-14 13:48:48 +02:00
parent 3e77e72f5a
commit d057553223
6 changed files with 26 additions and 24 deletions

View File

@@ -217,16 +217,16 @@ public class VideoRenderer {
int posCount = ReplayHandler.getPositionKeyframes().size();
AdvancedPosition pos = new AdvancedPosition();
Keyframe<AdvancedPosition> lastPos = positionKeyframes.getPreviousKeyframe(videoTime);
Keyframe<AdvancedPosition> lastPos = positionKeyframes.getPreviousKeyframe(videoTime, true);
Keyframe<AdvancedPosition> nextPos = null;
if (movement == null || lastPos == null) {
// Stay at one position, no movement
Keyframe<AdvancedPosition> keyframe = positionKeyframes.getNextKeyframe(-1);
Keyframe<AdvancedPosition> keyframe = positionKeyframes.getNextKeyframe(-1, true);
assert keyframe != null;
pos = keyframe.getValue();
} else {
// Position interpolation
nextPos = positionKeyframes.getNextKeyframe(videoTime);
nextPos = positionKeyframes.getNextKeyframe(videoTime, true);
int lastPosStamp = lastPos.getRealTimestamp();
int nextPosStamp = (nextPos == null ? lastPos : nextPos).getRealTimestamp();
@@ -275,8 +275,8 @@ public class VideoRenderer {
// WARNING: The rest of this method contains some magic for which Marius is responsible
// Time interpolation
Keyframe<TimestampValue> lastTime = timeKeyframes.getPreviousKeyframe(videoTime);
Keyframe<TimestampValue> nextTime = timeKeyframes.getNextKeyframe(videoTime);
Keyframe<TimestampValue> lastTime = timeKeyframes.getPreviousKeyframe(videoTime, false);
Keyframe<TimestampValue> nextTime = timeKeyframes.getNextKeyframe(videoTime, false);
int lastTimeStamp = 0;
int nextTimeStamp = 0;