public void visit()

in src/main/java/com/amazonaws/kinesisvideo/parser/utilities/OutputSegmentMerger.java [310:362]


        public void visit(final MkvDataElement dataElement) throws MkvElementVisitException {
            try {
                switch (state) {
                    case NEW:
                        Validate.isTrue(false, "Should not start with a data element " + dataElement.toString());
                        break;
                    case BUFFERING_SEGMENT:
                        bufferAndCollect(dataElement);
                        break;
                    case BUFFERING_CLUSTER_START:
                        if (MkvTypeInfos.TIMECODE.equals(dataElement.getElementMetaData().getTypeInfo())) {
                            final BigInteger currentTimeCode = (BigInteger) dataElement.getValueCopy().getVal();
                            if (lastClusterTimecode.isPresent()
                                    && currentTimeCode.compareTo(lastClusterTimecode.get()) <= 0) {
                                if (configuration.stopAtFirstNonMatchingSegment && emittedSegments >= 1) {
                                    log.info("Detected time code going back from {} to {}, state from {} to DONE",
                                            lastClusterTimecode,
                                            currentTimeCode,
                                            state);
                                    state = MergeState.DONE;
                                } else {
                                    //emit buffered segment start
                                    emitBufferedSegmentData(true);
                                }
                            }
                            if (!isDone()) {
                                emitClusterStart();
                                resetChannels();
                                state = EMITTING;
                                emitAdjustedTimeCode(dataElement);
                            }
                        } else {
                            bufferAndCollect(dataElement);
                        }
                        break;
                    case EMITTING:
                        if (MkvTypeInfos.TIMECODE.equals(dataElement.getElementMetaData().getTypeInfo())) {
                            emitAdjustedTimeCode(dataElement);
                        } else if (MkvTypeInfos.SIMPLEBLOCK.equals(dataElement.getElementMetaData().getTypeInfo())) {
                            emitFrame(dataElement);
                        } else {
                            emit(dataElement);
                        }
                        break;
                    case DONE:
                        log.warn("OutputSegmentMerger is already done. It will not process any more elements.");
                        break;
                }

            } catch (final IOException ie) {
                wrapIOException(ie);
            }
        }