Improve documentation of StreamStream/SampleQueue read methods

PiperOrigin-RevId: 357734165
This commit is contained in:
olly 2021-02-16 17:20:21 +00:00 committed by kim-vde
parent 1a34de5954
commit 5da9fd83e9
4 changed files with 28 additions and 5 deletions

View File

@ -19,6 +19,7 @@ import static java.lang.Math.max;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import com.google.android.exoplayer2.decoder.DecoderInputBuffer; import com.google.android.exoplayer2.decoder.DecoderInputBuffer;
import com.google.android.exoplayer2.decoder.DecoderInputBuffer.InsufficientCapacityException;
import com.google.android.exoplayer2.source.SampleStream; import com.google.android.exoplayer2.source.SampleStream;
import com.google.android.exoplayer2.util.Assertions; import com.google.android.exoplayer2.util.Assertions;
import com.google.android.exoplayer2.util.MediaClock; import com.google.android.exoplayer2.util.MediaClock;
@ -386,6 +387,10 @@ public abstract class BaseRenderer implements Renderer, RendererCapabilities {
* it's not changing. A sample will never be read if set to true, however it is still possible * it's not changing. A sample will never be read if set to true, however it is still possible
* for the end of stream or nothing to be read. * for the end of stream or nothing to be read.
* @return The status of read, one of {@link SampleStream.ReadDataResult}. * @return The status of read, one of {@link SampleStream.ReadDataResult}.
* @throws InsufficientCapacityException If the {@code buffer} is not a {@link
* DecoderInputBuffer#isFlagsOnly() flags-only} buffer and has insufficient capacity to hold
* the data of a sample being read. The buffer {@link DecoderInputBuffer#timeUs timestamp} and
* flags are populated if this exception is thrown, but the read position is not advanced.
*/ */
@SampleStream.ReadDataResult @SampleStream.ReadDataResult
protected final int readSource( protected final int readSource(

View File

@ -21,6 +21,7 @@ import androidx.annotation.Nullable;
import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.decoder.CryptoInfo; import com.google.android.exoplayer2.decoder.CryptoInfo;
import com.google.android.exoplayer2.decoder.DecoderInputBuffer; import com.google.android.exoplayer2.decoder.DecoderInputBuffer;
import com.google.android.exoplayer2.decoder.DecoderInputBuffer.InsufficientCapacityException;
import com.google.android.exoplayer2.extractor.TrackOutput.CryptoData; import com.google.android.exoplayer2.extractor.TrackOutput.CryptoData;
import com.google.android.exoplayer2.source.SampleQueue.SampleExtrasHolder; import com.google.android.exoplayer2.source.SampleQueue.SampleExtrasHolder;
import com.google.android.exoplayer2.upstream.Allocation; import com.google.android.exoplayer2.upstream.Allocation;
@ -120,6 +121,8 @@ import java.util.Arrays;
* *
* @param buffer The buffer to populate. * @param buffer The buffer to populate.
* @param extrasHolder The extras holder whose offset should be read and subsequently adjusted. * @param extrasHolder The extras holder whose offset should be read and subsequently adjusted.
* @throws InsufficientCapacityException If the {@code buffer} has insufficient capacity to hold
* the data being read.
*/ */
public void readToBuffer(DecoderInputBuffer buffer, SampleExtrasHolder extrasHolder) { public void readToBuffer(DecoderInputBuffer buffer, SampleExtrasHolder extrasHolder) {
readAllocationNode = readSampleData(readAllocationNode, buffer, extrasHolder, scratch); readAllocationNode = readSampleData(readAllocationNode, buffer, extrasHolder, scratch);
@ -131,6 +134,8 @@ import java.util.Arrays;
* *
* @param buffer The buffer to populate. * @param buffer The buffer to populate.
* @param extrasHolder The extras holder whose offset should be read and subsequently adjusted. * @param extrasHolder The extras holder whose offset should be read and subsequently adjusted.
* @throws InsufficientCapacityException If the {@code buffer} has insufficient capacity to hold
* the data being peeked.
*/ */
public void peekToBuffer(DecoderInputBuffer buffer, SampleExtrasHolder extrasHolder) { public void peekToBuffer(DecoderInputBuffer buffer, SampleExtrasHolder extrasHolder) {
readSampleData(readAllocationNode, buffer, extrasHolder, scratch); readSampleData(readAllocationNode, buffer, extrasHolder, scratch);
@ -259,6 +264,8 @@ import java.util.Arrays;
* @param scratch A scratch {@link ParsableByteArray}. * @param scratch A scratch {@link ParsableByteArray}.
* @return The first {@link AllocationNode} that contains unread bytes after the last byte that * @return The first {@link AllocationNode} that contains unread bytes after the last byte that
* the invocation read. * the invocation read.
* @throws InsufficientCapacityException If the {@code buffer} has insufficient capacity to hold
* the sample data.
*/ */
private static AllocationNode readSampleData( private static AllocationNode readSampleData(
AllocationNode allocationNode, AllocationNode allocationNode,

View File

@ -27,6 +27,7 @@ import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.Format;
import com.google.android.exoplayer2.FormatHolder; import com.google.android.exoplayer2.FormatHolder;
import com.google.android.exoplayer2.decoder.DecoderInputBuffer; import com.google.android.exoplayer2.decoder.DecoderInputBuffer;
import com.google.android.exoplayer2.decoder.DecoderInputBuffer.InsufficientCapacityException;
import com.google.android.exoplayer2.drm.DrmInitData; import com.google.android.exoplayer2.drm.DrmInitData;
import com.google.android.exoplayer2.drm.DrmSession; import com.google.android.exoplayer2.drm.DrmSession;
import com.google.android.exoplayer2.drm.DrmSessionEventListener; import com.google.android.exoplayer2.drm.DrmSessionEventListener;
@ -401,14 +402,19 @@ public class SampleQueue implements TrackOutput {
* @param buffer A {@link DecoderInputBuffer} to populate in the case of reading a sample or the * @param buffer A {@link DecoderInputBuffer} to populate in the case of reading a sample or the
* end of the stream. If the end of the stream has been reached, the {@link * end of the stream. If the end of the stream has been reached, the {@link
* C#BUFFER_FLAG_END_OF_STREAM} flag will be set on the buffer. If a {@link * C#BUFFER_FLAG_END_OF_STREAM} flag will be set on the buffer. If a {@link
* DecoderInputBuffer#isFlagsOnly() flags-only} buffer is passed, only the buffer flags may be * DecoderInputBuffer#isFlagsOnly() flags-only} buffer is passed and a sample is read, then
* populated by this method and the read position of the queue will not change. * only the buffer {@link DecoderInputBuffer#timeUs timestamp} and flags will be populated,
* and the read position will not be advanced.
* @param formatRequired Whether the caller requires that the format of the stream be read even if * @param formatRequired Whether the caller requires that the format of the stream be read even if
* it's not changing. A sample will never be read if set to true, however it is still possible * it's not changing. A sample will never be read if set to true, however it is still possible
* for the end of stream or nothing to be read. * for the end of stream or nothing to be read.
* @param loadingFinished True if an empty queue should be considered the end of the stream. * @param loadingFinished True if an empty queue should be considered the end of the stream.
* @return The result, which can be {@link C#RESULT_NOTHING_READ}, {@link C#RESULT_FORMAT_READ} or * @return The result, which can be {@link C#RESULT_NOTHING_READ}, {@link C#RESULT_FORMAT_READ} or
* {@link C#RESULT_BUFFER_READ}. * {@link C#RESULT_BUFFER_READ}.
* @throws InsufficientCapacityException If the {@code buffer} is not a {@link
* DecoderInputBuffer#isFlagsOnly() flags-only} buffer and has insufficient capacity to hold
* the data of a sample being read. The buffer {@link DecoderInputBuffer#timeUs timestamp} and
* flags are populated if this exception is thrown, but the read position is not advanced.
*/ */
@CallSuper @CallSuper
public int read( public int read(

View File

@ -19,6 +19,7 @@ import androidx.annotation.IntDef;
import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.FormatHolder; import com.google.android.exoplayer2.FormatHolder;
import com.google.android.exoplayer2.decoder.DecoderInputBuffer; import com.google.android.exoplayer2.decoder.DecoderInputBuffer;
import com.google.android.exoplayer2.decoder.DecoderInputBuffer.InsufficientCapacityException;
import java.io.IOException; import java.io.IOException;
import java.lang.annotation.Documented; import java.lang.annotation.Documented;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
@ -66,13 +67,17 @@ public interface SampleStream {
* @param buffer A {@link DecoderInputBuffer} to populate in the case of reading a sample or the * @param buffer A {@link DecoderInputBuffer} to populate in the case of reading a sample or the
* end of the stream. If the end of the stream has been reached, the {@link * end of the stream. If the end of the stream has been reached, the {@link
* C#BUFFER_FLAG_END_OF_STREAM} flag will be set on the buffer. If a {@link * C#BUFFER_FLAG_END_OF_STREAM} flag will be set on the buffer. If a {@link
* DecoderInputBuffer#isFlagsOnly() flags-only} buffer is passed, then no {@link * DecoderInputBuffer#isFlagsOnly() flags-only} buffer is passed and a sample is read, then
* DecoderInputBuffer#data} will be read and the read position of the stream will not change, * only the buffer {@link DecoderInputBuffer#timeUs timestamp} and flags will be populated,
* but the flags of the buffer will be populated. * and the read position will not be advanced.
* @param formatRequired Whether the caller requires that the format of the stream be read even if * @param formatRequired Whether the caller requires that the format of the stream be read even if
* it's not changing. A sample will never be read if set to true, however it is still possible * it's not changing. A sample will never be read if set to true, however it is still possible
* for the end of stream or nothing to be read. * for the end of stream or nothing to be read.
* @return The status of read, one of {@link ReadDataResult}. * @return The status of read, one of {@link ReadDataResult}.
* @throws InsufficientCapacityException If the {@code buffer} is not a {@link
* DecoderInputBuffer#isFlagsOnly() flags-only} buffer and has insufficient capacity to hold
* the data of a sample being read. The buffer {@link DecoderInputBuffer#timeUs timestamp} and
* flags are populated if this exception is thrown, but the read position is not advanced.
*/ */
@ReadDataResult @ReadDataResult
int readData(FormatHolder formatHolder, DecoderInputBuffer buffer, boolean formatRequired); int readData(FormatHolder formatHolder, DecoderInputBuffer buffer, boolean formatRequired);