public void parse()

in src/main/java/com/amazonaws/kinesisvideo/parser/ebml/EBMLParser.java [91:153]


    public void parse(ParserByteSource byteSource) {
        try (CallState callState = new CallState(byteSource)) {
            while (callState.shouldContinueParsing()) {
                if (log.isDebugEnabled()) {
                    log.debug("Current element read state {}", currentElement.currentElementReadState);
                }
                switch (currentElement.currentElementReadState) {
                    case NEW:
                        //check if any master elements are done because their end offset has been reached.
                        removeMasterElementsBasedOnSizeEnd();

                        currentElement.readId(callState);
                        break;
                    case ID_DONE:
                        currentElement.readSize(callState);
                        break;
                    case SIZE_DONE:
                        currentElement.updateTypeInfo(typeInfoProvider);
                        //check if any master elements are done because an equal or higher level
                        //element is reached.
                        removeMasterElementsBasedOnLevel();


                        //Call onstartForElement();
                        if (currentElement.isKnownType()) {
                            log.debug("Invoking onStartElement for current element {}", currentElement);
                            callbacks.onStartElement(currentElement.getMetadata(),
                                    currentElement.getDataSize(),
                                    replayIdAndSizeBuffer.getByteBuffer(),
                                    this::currentElementPath);
                        }

                        startReadingContentBasedOnType();
                        break;
                    case CONTENT_READING:
                        Validate.isTrue(currentElement.isKnownType(),
                                "We should read only from elements with known types");
                        currentElement.readContent(callState, callState, callbacks, maxContentBytesInOnePass);
                        break;
                    case CONTENT_SKIPPING:
                        Validate.isTrue(!currentElement.isKnownType(), "We should skip data for unknown elements only");
                        skipBuffer.rewind();
                        currentElement.skipContent(callState, callState, skipBuffer);
                        break;
                    case FINISHED:
                        invokeOnEndElementCallback(currentElement);
                        //check if any master elements are done because their end offset has been reached.
                        removeMasterElementsBasedOnSizeEnd();


                        createNewCurrentElementInfo();
                        break;
                    default:
                        throw new IllegalArgumentException("Unexpected ElementReadState");
                }
            }
            log.debug("Stopping parsing");
            if (endOfStream) {
                closeParser();
            }

        }
    }