Class BinarySearchSeeker
- java.lang.Object
-
- com.google.android.exoplayer2.extractor.BinarySearchSeeker
-
public abstract class BinarySearchSeeker extends Object
A seeker that supports seeking within a stream by searching for the target frame using binary search.This seeker operates on a stream that contains multiple frames (or samples). Each frame is associated with some kind of timestamps, such as stream time, or frame indices. Given a target seek time, the seeker will find the corresponding target timestamp, and perform a search operation within the stream to identify the target frame and return the byte position in the stream of the target frame.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
BinarySearchSeeker.BinarySearchSeekMap
ASeekMap
implementation that returns the estimated byte location fromBinarySearchSeeker.SeekOperationParams.calculateNextSearchBytePosition(long, long, long, long, long, long)
for eachBinarySearchSeeker.BinarySearchSeekMap.getSeekPoints(long)
query.static class
BinarySearchSeeker.DefaultSeekTimestampConverter
ABinarySearchSeeker.SeekTimestampConverter
implementation that returns the seek time itself as the timestamp for a seek time position.protected static class
BinarySearchSeeker.SeekOperationParams
Contains parameters for a pending seek operation byBinarySearchSeeker
.protected static interface
BinarySearchSeeker.SeekTimestampConverter
A converter that converts seek time in stream time into target timestamp for theBinarySearchSeeker
.static class
BinarySearchSeeker.TimestampSearchResult
Represents possible search results forBinarySearchSeeker.TimestampSeeker.searchForTimestamp(ExtractorInput, long)
.protected static interface
BinarySearchSeeker.TimestampSeeker
A seeker that looks for a given timestamp from an input.
-
Field Summary
Fields Modifier and Type Field Description protected BinarySearchSeeker.BinarySearchSeekMap
seekMap
protected BinarySearchSeeker.SeekOperationParams
seekOperationParams
protected BinarySearchSeeker.TimestampSeeker
timestampSeeker
-
Constructor Summary
Constructors Modifier Constructor Description protected
BinarySearchSeeker(BinarySearchSeeker.SeekTimestampConverter seekTimestampConverter, BinarySearchSeeker.TimestampSeeker timestampSeeker, long durationUs, long floorTimePosition, long ceilingTimePosition, long floorBytePosition, long ceilingBytePosition, long approxBytesPerFrame, int minimumSearchRange)
Constructs an instance.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected BinarySearchSeeker.SeekOperationParams
createSeekParamsForTargetTimeUs(long timeUs)
SeekMap
getSeekMap()
Returns the seek map for the stream.int
handlePendingSeek(ExtractorInput input, PositionHolder seekPositionHolder)
Continues to handle the pending seek operation.boolean
isSeeking()
Returns whether the last operation set bysetSeekTargetUs(long)
is still pending.protected void
markSeekOperationFinished(boolean foundTargetFrame, long resultPosition)
protected void
onSeekOperationFinished(boolean foundTargetFrame, long resultPosition)
protected int
seekToPosition(ExtractorInput input, long position, PositionHolder seekPositionHolder)
void
setSeekTargetUs(long timeUs)
Sets the target time in microseconds within the stream to seek to.protected boolean
skipInputUntilPosition(ExtractorInput input, long position)
-
-
-
Field Detail
-
seekMap
protected final BinarySearchSeeker.BinarySearchSeekMap seekMap
-
timestampSeeker
protected final BinarySearchSeeker.TimestampSeeker timestampSeeker
-
seekOperationParams
@Nullable protected BinarySearchSeeker.SeekOperationParams seekOperationParams
-
-
Constructor Detail
-
BinarySearchSeeker
protected BinarySearchSeeker(BinarySearchSeeker.SeekTimestampConverter seekTimestampConverter, BinarySearchSeeker.TimestampSeeker timestampSeeker, long durationUs, long floorTimePosition, long ceilingTimePosition, long floorBytePosition, long ceilingBytePosition, long approxBytesPerFrame, int minimumSearchRange)
Constructs an instance.- Parameters:
seekTimestampConverter
- TheBinarySearchSeeker.SeekTimestampConverter
that converts seek time in stream time into target timestamp.timestampSeeker
- ABinarySearchSeeker.TimestampSeeker
that will be used to search for timestamps within the stream.durationUs
- The duration of the stream in microseconds.floorTimePosition
- The minimum timestamp value (inclusive) in the stream.ceilingTimePosition
- The minimum timestamp value (exclusive) in the stream.floorBytePosition
- The starting position of the frame with minimum timestamp value (inclusive) in the stream.ceilingBytePosition
- The position after the frame with maximum timestamp value in the stream.approxBytesPerFrame
- Approximated bytes per frame.minimumSearchRange
- The minimum byte range that this binary seeker will operate on. If the remaining search range is smaller than this value, the search will stop, and the seeker will return the position at the floor of the range as the result.
-
-
Method Detail
-
getSeekMap
public final SeekMap getSeekMap()
Returns the seek map for the stream.
-
setSeekTargetUs
public final void setSeekTargetUs(long timeUs)
Sets the target time in microseconds within the stream to seek to.- Parameters:
timeUs
- The target time in microseconds within the stream.
-
isSeeking
public final boolean isSeeking()
Returns whether the last operation set bysetSeekTargetUs(long)
is still pending.
-
handlePendingSeek
public int handlePendingSeek(ExtractorInput input, PositionHolder seekPositionHolder) throws IOException
Continues to handle the pending seek operation. Returns one of theRESULT_
values fromExtractor
.- Parameters:
input
- TheExtractorInput
from which data should be read.seekPositionHolder
- IfExtractor.RESULT_SEEK
is returned, this holder is updated to hold the position of the required seek.- Returns:
- One of the
RESULT_
values defined inExtractor
. - Throws:
IOException
- If an error occurred reading from the input.
-
createSeekParamsForTargetTimeUs
protected BinarySearchSeeker.SeekOperationParams createSeekParamsForTargetTimeUs(long timeUs)
-
markSeekOperationFinished
protected final void markSeekOperationFinished(boolean foundTargetFrame, long resultPosition)
-
onSeekOperationFinished
protected void onSeekOperationFinished(boolean foundTargetFrame, long resultPosition)
-
skipInputUntilPosition
protected final boolean skipInputUntilPosition(ExtractorInput input, long position) throws IOException
- Throws:
IOException
-
seekToPosition
protected final int seekToPosition(ExtractorInput input, long position, PositionHolder seekPositionHolder)
-
-