in src/main/java/com/aws/iot/edgeconnectorforkvs/videouploader/visitors/MergeFragmentVisitor.java [227:270]
public void visit(MkvEndMasterElement endMasterElement) throws MkvElementVisitException {
final EBMLTypeInfo ebmlTypeInfo = endMasterElement.getElementMetaData().getTypeInfo();
log.debug("-name=" + ebmlTypeInfo.getName() + ", level=" + ebmlTypeInfo.getLevel());
switch (state) {
case NEW:
throw new IllegalArgumentException("NEW state should not start with MkvEndMasterElement "
+ endMasterElement);
case BUFFERING_SEGMENT:
if (MkvTypeInfos.SEGMENT.equals(ebmlTypeInfo)) {
log.trace("state: BUFFERING_SEGMENT -> NEW");
state = MergeState.NEW;
nextFragmentTimecodeOffsetMs = -1;
bufferingSegmentStream.reset();
bufferingSegmentChannel = Channels.newChannel(bufferingSegmentStream);
isSegmentVerified = false;
} else if (MkvTypeInfos.TRACKS.equals(ebmlTypeInfo)) {
isIgnoreTracksElements = false;
}
break;
case BUFFERING_CLUSTER:
if (MkvTypeInfos.CLUSTER.equals(ebmlTypeInfo)) {
sortClusters();
emitCluster(previousCluster);
previousCluster = currentCluster;
currentCluster = null;
if (isPausable) {
log.trace("state: BUFFERING_CLUSTER -> PAUSE");
state = MergeState.PAUSE;
} else {
log.trace("state: BUFFERING_CLUSTER -> BUFFERING_SEGMENT");
state = MergeState.BUFFERING_SEGMENT;
}
}
break;
case BUFFERING_TAG:
if (MkvTypeInfos.TAGS.equals(ebmlTypeInfo)) {
log.trace("state: BUFFERING_TAG -> BUFFERING_SEGMENT");
state = MergeState.BUFFERING_SEGMENT;
}
break;
default:
throw new MkvTracksException("Unknown state " + state);
}
}