Commit 537e8aad by claincly Committed by bachinger

Allow the extractor deplete the reordering queue as much as possible.

#minor-release

PiperOrigin-RevId: 370673852
parent 26a6aad3
...@@ -139,8 +139,9 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; ...@@ -139,8 +139,9 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
} }
long packetArrivalTimeMs = SystemClock.elapsedRealtime(); long packetArrivalTimeMs = SystemClock.elapsedRealtime();
long packetCutoffTimeMs = getCutoffTimeMs(packetArrivalTimeMs);
reorderingQueue.offer(packet, packetArrivalTimeMs); reorderingQueue.offer(packet, packetArrivalTimeMs);
@Nullable RtpPacket dequeuedPacket = reorderingQueue.poll(getCutoffTimeMs(packetArrivalTimeMs)); @Nullable RtpPacket dequeuedPacket = reorderingQueue.poll(packetCutoffTimeMs);
if (dequeuedPacket == null) { if (dequeuedPacket == null) {
// No packet is available for reading. // No packet is available for reading.
return RESULT_CONTINUE; return RESULT_CONTINUE;
...@@ -164,15 +165,20 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; ...@@ -164,15 +165,20 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
// Ignores the incoming packets while seek is pending. // Ignores the incoming packets while seek is pending.
if (isSeekPending) { if (isSeekPending) {
if (nextRtpTimestamp != C.TIME_UNSET && playbackStartTimeUs != C.TIME_UNSET) { if (nextRtpTimestamp != C.TIME_UNSET && playbackStartTimeUs != C.TIME_UNSET) {
reorderingQueue.reset();
payloadReader.seek(nextRtpTimestamp, playbackStartTimeUs); payloadReader.seek(nextRtpTimestamp, playbackStartTimeUs);
isSeekPending = false; isSeekPending = false;
nextRtpTimestamp = C.TIME_UNSET; nextRtpTimestamp = C.TIME_UNSET;
playbackStartTimeUs = C.TIME_UNSET; playbackStartTimeUs = C.TIME_UNSET;
} }
} else { } else {
rtpPacketDataBuffer.reset(packet.payloadData); do {
payloadReader.consume( // Deplete the reordering queue as much as possible.
rtpPacketDataBuffer, packet.timestamp, packet.sequenceNumber, packet.marker); rtpPacketDataBuffer.reset(packet.payloadData);
payloadReader.consume(
rtpPacketDataBuffer, packet.timestamp, packet.sequenceNumber, packet.marker);
packet = reorderingQueue.poll(packetCutoffTimeMs);
} while (packet != null);
} }
} }
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