Fix packet reference counting in MarkerProcessor
This commit is contained in:
@@ -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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user