mirror of
https://github.com/samsonjs/media.git
synced 2026-04-19 13:35:47 +00:00
Add getReadingPositionUs to Renderer.
This method is a generalization of the existing hasReadStreamToEnd. It is useful to determine whether a renderer already read beyond a new duration of a period. PiperOrigin-RevId: 230689165
This commit is contained in:
parent
fd081d49c7
commit
49b9775d08
3 changed files with 28 additions and 7 deletions
|
|
@ -37,7 +37,7 @@ public abstract class BaseRenderer implements Renderer, RendererCapabilities {
|
|||
private SampleStream stream;
|
||||
private Format[] streamFormats;
|
||||
private long streamOffsetUs;
|
||||
private boolean readEndOfStream;
|
||||
private long readingPositionUs;
|
||||
private boolean streamIsFinal;
|
||||
|
||||
/**
|
||||
|
|
@ -46,7 +46,7 @@ public abstract class BaseRenderer implements Renderer, RendererCapabilities {
|
|||
*/
|
||||
public BaseRenderer(int trackType) {
|
||||
this.trackType = trackType;
|
||||
readEndOfStream = true;
|
||||
readingPositionUs = C.TIME_END_OF_SOURCE;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -98,7 +98,7 @@ public abstract class BaseRenderer implements Renderer, RendererCapabilities {
|
|||
throws ExoPlaybackException {
|
||||
Assertions.checkState(!streamIsFinal);
|
||||
this.stream = stream;
|
||||
readEndOfStream = false;
|
||||
readingPositionUs = offsetUs;
|
||||
streamFormats = formats;
|
||||
streamOffsetUs = offsetUs;
|
||||
onStreamChanged(formats, offsetUs);
|
||||
|
|
@ -111,7 +111,12 @@ public abstract class BaseRenderer implements Renderer, RendererCapabilities {
|
|||
|
||||
@Override
|
||||
public final boolean hasReadStreamToEnd() {
|
||||
return readEndOfStream;
|
||||
return readingPositionUs == C.TIME_END_OF_SOURCE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final long getReadingPositionUs() {
|
||||
return readingPositionUs;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -132,7 +137,7 @@ public abstract class BaseRenderer implements Renderer, RendererCapabilities {
|
|||
@Override
|
||||
public final void resetPosition(long positionUs) throws ExoPlaybackException {
|
||||
streamIsFinal = false;
|
||||
readEndOfStream = false;
|
||||
readingPositionUs = positionUs;
|
||||
onPositionReset(positionUs, false);
|
||||
}
|
||||
|
||||
|
|
@ -303,10 +308,11 @@ public abstract class BaseRenderer implements Renderer, RendererCapabilities {
|
|||
int result = stream.readData(formatHolder, buffer, formatRequired);
|
||||
if (result == C.RESULT_BUFFER_READ) {
|
||||
if (buffer.isEndOfStream()) {
|
||||
readEndOfStream = true;
|
||||
readingPositionUs = C.TIME_END_OF_SOURCE;
|
||||
return streamIsFinal ? C.RESULT_BUFFER_READ : C.RESULT_NOTHING_READ;
|
||||
}
|
||||
buffer.timeUs += streamOffsetUs;
|
||||
readingPositionUs = Math.max(readingPositionUs, buffer.timeUs);
|
||||
} else if (result == C.RESULT_FORMAT_READ) {
|
||||
Format format = formatHolder.format;
|
||||
if (format.subsampleOffsetUs != Format.OFFSET_SAMPLE_RELATIVE) {
|
||||
|
|
@ -332,7 +338,7 @@ public abstract class BaseRenderer implements Renderer, RendererCapabilities {
|
|||
* Returns whether the upstream source is ready.
|
||||
*/
|
||||
protected final boolean isSourceReady() {
|
||||
return readEndOfStream ? streamIsFinal : stream.isReady();
|
||||
return hasReadStreamToEnd() ? streamIsFinal : stream.isReady();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -122,6 +122,11 @@ public abstract class NoSampleRenderer implements Renderer, RendererCapabilities
|
|||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getReadingPositionUs() {
|
||||
return C.TIME_END_OF_SOURCE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void setCurrentStreamFinal() {
|
||||
streamIsFinal = true;
|
||||
|
|
|
|||
|
|
@ -160,6 +160,16 @@ public interface Renderer extends PlayerMessage.Target {
|
|||
*/
|
||||
boolean hasReadStreamToEnd();
|
||||
|
||||
/**
|
||||
* Returns the playback position up to which the renderer has read samples from the current {@link
|
||||
* SampleStream}, in microseconds, or {@link C#TIME_END_OF_SOURCE} if the renderer has read the
|
||||
* current {@link SampleStream} to the end.
|
||||
*
|
||||
* <p>This method may be called when the renderer is in the following states: {@link
|
||||
* #STATE_ENABLED}, {@link #STATE_STARTED}.
|
||||
*/
|
||||
long getReadingPositionUs();
|
||||
|
||||
/**
|
||||
* Signals to the renderer that the current {@link SampleStream} will be the final one supplied
|
||||
* before it is next disabled or reset.
|
||||
|
|
|
|||
Loading…
Reference in a new issue