Fix empty container box bug
If a container box is empty, it is never removed from the container box stack, breaking the extractor. Issue: #1308 ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=117228211
This commit is contained in:
parent
37e00c8c6f
commit
1ca32cced8
@ -195,7 +195,12 @@ public final class Mp4Extractor implements Extractor, SeekMap {
|
||||
if (shouldParseContainerAtom(atomType)) {
|
||||
long endPosition = input.getPosition() + atomSize - atomHeaderBytesRead;
|
||||
containerAtoms.add(new ContainerAtom(atomType, endPosition));
|
||||
enterReadingAtomHeaderState();
|
||||
if (atomSize == atomHeaderBytesRead) {
|
||||
processAtomEnded(endPosition);
|
||||
} else {
|
||||
// Start reading the first child atom.
|
||||
enterReadingAtomHeaderState();
|
||||
}
|
||||
} else if (shouldParseLeafAtom(atomType)) {
|
||||
// We don't support parsing of leaf atoms that define extended atom sizes, or that have
|
||||
// lengths greater than Integer.MAX_VALUE.
|
||||
@ -238,7 +243,11 @@ public final class Mp4Extractor implements Extractor, SeekMap {
|
||||
seekRequired = true;
|
||||
}
|
||||
}
|
||||
processAtomEnded(atomEndPosition);
|
||||
return seekRequired && parserState != STATE_READING_SAMPLE;
|
||||
}
|
||||
|
||||
private void processAtomEnded(long atomEndPosition) {
|
||||
while (!containerAtoms.isEmpty() && containerAtoms.peek().endPosition == atomEndPosition) {
|
||||
Atom.ContainerAtom containerAtom = containerAtoms.pop();
|
||||
if (containerAtom.type == Atom.TYPE_moov) {
|
||||
@ -246,14 +255,13 @@ public final class Mp4Extractor implements Extractor, SeekMap {
|
||||
processMoovAtom(containerAtom);
|
||||
containerAtoms.clear();
|
||||
parserState = STATE_READING_SAMPLE;
|
||||
return false;
|
||||
} else if (!containerAtoms.isEmpty()) {
|
||||
containerAtoms.peek().add(containerAtom);
|
||||
}
|
||||
}
|
||||
|
||||
enterReadingAtomHeaderState();
|
||||
return seekRequired;
|
||||
if (parserState != STATE_READING_SAMPLE) {
|
||||
enterReadingAtomHeaderState();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -289,7 +297,6 @@ public final class Mp4Extractor implements Extractor, SeekMap {
|
||||
if (udta != null) {
|
||||
gaplessInfo = AtomParsers.parseUdta(udta);
|
||||
}
|
||||
|
||||
for (int i = 0; i < moov.containerChildren.size(); i++) {
|
||||
Atom.ContainerAtom atom = moov.containerChildren.get(i);
|
||||
if (atom.type != Atom.TYPE_trak) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user