summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Santiago Seifert <aquilescanta@google.com> 2020-04-24 13:20:00 +0100
committer Santiago Seifert <aquilescanta@google.com> 2020-04-24 16:55:58 +0000
commitaba783aae27663bb79a93a10e630fc4ee900bdb5 (patch)
tree07751cee26f5495c46e15f0aa5a6ec05ec28849b
parentcd220824deb05a9d7aeae7d510f8fc6e43495674 (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.java9
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) {