Fix packet reference counting in MarkerProcessor

This commit is contained in:
Jonas Herzig
2020-04-01 23:44:21 +02:00
parent 2dbd5cde02
commit bf6f71ef89

View File

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