private void bufferAndCollectCluster()

in src/main/java/com/aws/iot/edgeconnectorforkvs/videouploader/visitors/MergeFragmentVisitor.java [415:451]


    private void bufferAndCollectCluster(final MkvDataElement dataElement)
            throws MkvElementVisitException {
        if (currentCluster == null) {
            throw new MkvElementVisitException("Unable to buffer data element to empty clusters",
                    new RuntimeException());
        }

        final EBMLTypeInfo ebmlTypeInfo = dataElement.getElementMetaData().getTypeInfo();
        if (MkvTypeInfos.TIMECODE.equals(ebmlTypeInfo)) {
            Optional<BigInteger> clusterTimecode = Optional.of((BigInteger) dataElement.getValueCopy().getVal());
            final long clusterTimecodeMs = clusterTimecode.get().longValue();

            if (nextFragmentTimecodeOffsetMs == -1) {
                if (previousCluster != null) {
                    // TODO: we can do better guess if we refer to more than one previous cluster
                    nextFragmentTimecodeOffsetMs = previousCluster.getExpectedNextTimeCode();
                } else {
                    // There is no previous cluster to help us guess
                    nextFragmentTimecodeOffsetMs = 0;
                }
            }

            final long clusterTimecodeUpdatedMs = clusterTimecodeMs + nextFragmentTimecodeOffsetMs / timescaleMs;
            log.trace("Update cluster timecode from " + clusterTimecodeMs + " to " + clusterTimecodeUpdatedMs);
            currentCluster.setAbsoluteTimecode(clusterTimecodeUpdatedMs);
        } else if (MkvTypeInfos.SIMPLEBLOCK.equals(ebmlTypeInfo)) {
            final MkvValue<Frame> frame = dataElement.getValueCopy();

            currentCluster.addSimpleBlock(new MkvSimpleBlock(
                    frame.getVal().getTimeCode(),
                    frame.getVal().getTrackNumber(),
                    dataElement.getIdAndSizeRawBytes(),
                    dataElement.getDataBuffer()));
        } else {
            log.debug("Ignore ebml element: " + ebmlTypeInfo.getName());
        }
    }