mirror of
https://github.com/samsonjs/media.git
synced 2026-04-03 10:55:48 +00:00
SampleStream fixes
This commit is contained in:
parent
75b9062583
commit
3562fe1c69
3 changed files with 43 additions and 17 deletions
|
|
@ -361,7 +361,7 @@ import java.util.Arrays;
|
|||
// SampleStream methods.
|
||||
|
||||
/* package */ boolean isReady(int track) {
|
||||
return loadingFinished || (!isPendingReset() && sampleQueues[track].hasNextSample());
|
||||
return !suppressRead() && (loadingFinished || sampleQueues[track].hasNextSample());
|
||||
}
|
||||
|
||||
/* package */ void maybeThrowError() throws IOException {
|
||||
|
|
@ -370,7 +370,7 @@ import java.util.Arrays;
|
|||
|
||||
/* package */ int readData(int track, FormatHolder formatHolder, DecoderInputBuffer buffer,
|
||||
boolean formatRequired) {
|
||||
if (notifyDiscontinuity || isPendingReset()) {
|
||||
if (suppressRead()) {
|
||||
return C.RESULT_NOTHING_READ;
|
||||
}
|
||||
return sampleQueues[track].read(formatHolder, buffer, formatRequired, loadingFinished,
|
||||
|
|
@ -378,6 +378,9 @@ import java.util.Arrays;
|
|||
}
|
||||
|
||||
/* package */ int skipData(int track, long positionUs) {
|
||||
if (suppressRead()) {
|
||||
return 0;
|
||||
}
|
||||
SampleQueue sampleQueue = sampleQueues[track];
|
||||
if (loadingFinished && positionUs > sampleQueue.getLargestQueuedTimestampUs()) {
|
||||
return sampleQueue.advanceToEnd();
|
||||
|
|
@ -387,6 +390,10 @@ import java.util.Arrays;
|
|||
}
|
||||
}
|
||||
|
||||
private boolean suppressRead() {
|
||||
return notifyDiscontinuity || isPendingReset();
|
||||
}
|
||||
|
||||
// Loader.Callback implementation.
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -272,9 +272,11 @@ public class ChunkSampleStream<T extends ChunkSource> implements SampleStream, S
|
|||
|
||||
@Override
|
||||
public int skipData(long positionUs) {
|
||||
if (isPendingReset()) {
|
||||
return 0;
|
||||
}
|
||||
int skipCount;
|
||||
if (loadingFinished && positionUs > primarySampleQueue.getLargestQueuedTimestampUs()) {
|
||||
primarySampleQueue.advanceToEnd();
|
||||
skipCount = primarySampleQueue.advanceToEnd();
|
||||
} else {
|
||||
skipCount = primarySampleQueue.advanceTo(positionUs, true, true);
|
||||
|
|
@ -282,7 +284,9 @@ public class ChunkSampleStream<T extends ChunkSource> implements SampleStream, S
|
|||
skipCount = 0;
|
||||
}
|
||||
}
|
||||
primarySampleQueue.discardToRead();
|
||||
if (skipCount > 0) {
|
||||
primarySampleQueue.discardToRead();
|
||||
}
|
||||
return skipCount;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -385,7 +385,35 @@ import java.util.LinkedList;
|
|||
if (isPendingReset()) {
|
||||
return C.RESULT_NOTHING_READ;
|
||||
}
|
||||
int result = sampleQueues[trackGroupIndex].read(formatHolder, buffer, requireFormat,
|
||||
loadingFinished, lastSeekPositionUs);
|
||||
if (result == C.RESULT_BUFFER_READ) {
|
||||
discardToRead();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public int skipData(int trackGroupIndex, long positionUs) {
|
||||
if (isPendingReset()) {
|
||||
return 0;
|
||||
}
|
||||
int skipCount;
|
||||
SampleQueue sampleQueue = sampleQueues[trackGroupIndex];
|
||||
if (loadingFinished && positionUs > sampleQueue.getLargestQueuedTimestampUs()) {
|
||||
skipCount = sampleQueue.advanceToEnd();
|
||||
} else {
|
||||
skipCount = sampleQueue.advanceTo(positionUs, true, true);
|
||||
if (skipCount == SampleQueue.ADVANCE_FAILED) {
|
||||
skipCount = 0;
|
||||
}
|
||||
}
|
||||
if (skipCount > 0) {
|
||||
discardToRead();
|
||||
}
|
||||
return skipCount;
|
||||
}
|
||||
|
||||
private void discardToRead() {
|
||||
if (!mediaChunks.isEmpty()) {
|
||||
while (mediaChunks.size() > 1 && finishedReadingChunk(mediaChunks.getFirst())) {
|
||||
mediaChunks.removeFirst();
|
||||
|
|
@ -399,19 +427,6 @@ import java.util.LinkedList;
|
|||
}
|
||||
downstreamTrackFormat = trackFormat;
|
||||
}
|
||||
|
||||
return sampleQueues[trackGroupIndex].read(formatHolder, buffer, requireFormat, loadingFinished,
|
||||
lastSeekPositionUs);
|
||||
}
|
||||
|
||||
public int skipData(int trackGroupIndex, long positionUs) {
|
||||
SampleQueue sampleQueue = sampleQueues[trackGroupIndex];
|
||||
if (loadingFinished && positionUs > sampleQueue.getLargestQueuedTimestampUs()) {
|
||||
return sampleQueue.advanceToEnd();
|
||||
} else {
|
||||
int skipCount = sampleQueue.advanceTo(positionUs, true, true);
|
||||
return skipCount == SampleQueue.ADVANCE_FAILED ? 0 : skipCount;
|
||||
}
|
||||
}
|
||||
|
||||
private boolean finishedReadingChunk(HlsMediaChunk chunk) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue