Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit aba783aa authored by Santiago Seifert's avatar Santiago Seifert
Browse files

Defer extractor init until after sniff

Instead of doing it immediately after sniff success.
This prevents some extractor implementations from
outputting formats during the "sniffing" advance.

Bug: 154120292
Test: atest CtsMediaParserTestCases
Change-Id: I4f3349a8053d371cd06beaf24bd9745da0a4a093
parent cd220824
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -856,6 +856,7 @@ public final class MediaParser {
    private String mParserName;
    private Extractor mExtractor;
    private ExtractorInput mExtractorInput;
    private boolean mPendingExtractorInit;
    private long mPendingSeekPosition;
    private long mPendingSeekTimeMicros;
    private boolean mLoggedSchemeInitDataCreationException;
@@ -972,7 +973,7 @@ public final class MediaParser {
                        if (extractor.sniff(mExtractorInput)) {
                            mParserName = parserName;
                            mExtractor = extractor;
                            mExtractor.init(new ExtractorOutputAdapter());
                            mPendingExtractorInit = true;
                            break;
                        }
                    } catch (EOFException e) {
@@ -988,13 +989,17 @@ public final class MediaParser {
            }
        }

        if (mPendingExtractorInit) {
            mExtractor.init(new ExtractorOutputAdapter());
            mPendingExtractorInit = false;
        }
        if (isPendingSeek()) {
            mExtractor.seek(mPendingSeekPosition, mPendingSeekTimeMicros);
            removePendingSeek();
        }

        mPositionHolder.position = seekableInputReader.getPosition();
        int result = 0;
        int result;
        try {
            result = mExtractor.read(mExtractorInput, mPositionHolder);
        } catch (ParserException e) {