Commit 67567ffa by olly Committed by Oliver Woodman

TsExtractor: Do less work if payload reader does not exist

There's no reason to perform the discontinuity check or skip
the adaptation field if we don't have a payload reader for
the packet.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=169374609
parent ed768822
...@@ -263,20 +263,24 @@ public final class TsExtractor implements Extractor { ...@@ -263,20 +263,24 @@ public final class TsExtractor implements Extractor {
boolean adaptationFieldExists = (tsPacketHeader & 0x20) != 0; boolean adaptationFieldExists = (tsPacketHeader & 0x20) != 0;
boolean payloadExists = (tsPacketHeader & 0x10) != 0; boolean payloadExists = (tsPacketHeader & 0x10) != 0;
TsPayloadReader payloadReader = payloadExists ? tsPayloadReaders.get(pid) : null;
if (payloadReader == null) {
tsPacketBuffer.setPosition(endOfPacket);
return RESULT_CONTINUE;
}
// Discontinuity check. // Discontinuity check.
boolean discontinuityFound = false;
if (mode != MODE_HLS) { if (mode != MODE_HLS) {
int continuityCounter = tsPacketHeader & 0xF; int continuityCounter = tsPacketHeader & 0xF;
int previousCounter = continuityCounters.get(pid, continuityCounter - 1); int previousCounter = continuityCounters.get(pid, continuityCounter - 1);
continuityCounters.put(pid, continuityCounter); continuityCounters.put(pid, continuityCounter);
if (previousCounter == continuityCounter) { if (previousCounter == continuityCounter) {
if (payloadExists) {
// Duplicate packet found. // Duplicate packet found.
tsPacketBuffer.setPosition(endOfPacket); tsPacketBuffer.setPosition(endOfPacket);
return RESULT_CONTINUE; return RESULT_CONTINUE;
}
} else if (continuityCounter != ((previousCounter + 1) & 0xF)) { } else if (continuityCounter != ((previousCounter + 1) & 0xF)) {
discontinuityFound = true; // Discontinuity found.
payloadReader.seek();
} }
} }
...@@ -287,17 +291,9 @@ public final class TsExtractor implements Extractor { ...@@ -287,17 +291,9 @@ public final class TsExtractor implements Extractor {
} }
// Read the payload. // Read the payload.
if (payloadExists) {
TsPayloadReader payloadReader = tsPayloadReaders.get(pid);
if (payloadReader != null) {
if (discontinuityFound) {
payloadReader.seek();
}
tsPacketBuffer.setLimit(endOfPacket); tsPacketBuffer.setLimit(endOfPacket);
payloadReader.consume(tsPacketBuffer, payloadUnitStartIndicator); payloadReader.consume(tsPacketBuffer, payloadUnitStartIndicator);
tsPacketBuffer.setLimit(limit); tsPacketBuffer.setLimit(limit);
}
}
tsPacketBuffer.setPosition(endOfPacket); tsPacketBuffer.setPosition(endOfPacket);
return RESULT_CONTINUE; return RESULT_CONTINUE;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment