diff --git a/src/main/java/com/replaymod/editor/gui/MarkerProcessor.java b/src/main/java/com/replaymod/editor/gui/MarkerProcessor.java index b96eb158..00aaa97e 100644 --- a/src/main/java/com/replaymod/editor/gui/MarkerProcessor.java +++ b/src/main/java/com/replaymod/editor/gui/MarkerProcessor.java @@ -93,10 +93,11 @@ public class MarkerProcessor { try (ReplayOutputStream replayOutputStream = outputReplayFile.writePacketData()) { if (cutFilter != null) { - cutFilter = squashFilter; + cutFilter.release(); + cutFilter = squashFilter.copy(); } else if (splitCounter > 0) { List packets = new ArrayList<>(); - squashFilter.onEnd( + squashFilter.copy().onEnd( new IteratorStream(packets.listIterator(), (StreamFilter) null), timeOffset ); @@ -108,6 +109,9 @@ public class MarkerProcessor { while (nextPacket != null) { if (nextMarker != null && nextPacket.getTime() > nextMarker.getTime()) { if (MARKER_NAME_START_CUT.equals(nextMarker.getName())) { + if (cutFilter != null) { + cutFilter.release(); + } startCutOffset = nextMarker.getTime(); cutFilter = new SquashFilter(); } else if (MARKER_NAME_END_CUT.equals(nextMarker.getName())) { @@ -139,13 +143,12 @@ public class MarkerProcessor { squashFilter.onPacket(null, nextPacket); if (cutFilter != null) { - if (cutFilter != squashFilter) { - cutFilter.onPacket(null, nextPacket); - } + cutFilter.onPacket(null, nextPacket); } else { - replayOutputStream.write(nextPacket.getTime() - timeOffset, nextPacket.getPacket()); + replayOutputStream.write(nextPacket.getTime() - timeOffset, nextPacket.getPacket().copy()); duration = nextPacket.getTime() - timeOffset; } + nextPacket.release(); nextPacket = replayInputStream.readPacket(); if (nextPacket != null) { progress.accept((float) nextPacket.getTime() / (float) inputDuration); @@ -178,6 +181,11 @@ public class MarkerProcessor { outputReplayFile.save(); } } + + squashFilter.release(); + if (cutFilter != null) { + cutFilter.release(); + } } } }