diff options
| author | 2020-04-24 13:20:00 +0100 | |
|---|---|---|
| committer | 2020-04-24 16:55:58 +0000 | |
| commit | aba783aae27663bb79a93a10e630fc4ee900bdb5 (patch) | |
| tree | 07751cee26f5495c46e15f0aa5a6ec05ec28849b | |
| parent | cd220824deb05a9d7aeae7d510f8fc6e43495674 (diff) | |
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
| -rw-r--r-- | apex/media/framework/java/android/media/MediaParser.java | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/apex/media/framework/java/android/media/MediaParser.java b/apex/media/framework/java/android/media/MediaParser.java index 50f4ddd5e2e3..2746cba76887 100644 --- a/apex/media/framework/java/android/media/MediaParser.java +++ b/apex/media/framework/java/android/media/MediaParser.java @@ -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) { |