Package com.google.android.exoplayer2.decoder

## Class DecoderInputBuffer

- java.lang.Object
- - com.google.android.exoplayer2.decoder.Buffer
  - - com.google.android.exoplayer2.decoder.DecoderInputBuffer

- Direct Known Subclasses:
    `MetadataInputBuffer`, `SubtitleInputBuffer`

      public class DecoderInputBuffer
      extends Buffer

  Holds input for a decoder.

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class | Description
    --- | --- | ---
    `static interface` | `DecoderInputBuffer.BufferReplacementMode` | The buffer replacement mode.
    `static class` | `DecoderInputBuffer.InsufficientCapacityException` | Thrown when an attempt is made to write into a `DecoderInputBuffer` whose `bufferReplacementMode` is `BUFFER_REPLACEMENT_MODE_DISABLED` and who `data` capacity is smaller than required.

  - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `static int` | `BUFFER_REPLACEMENT_MODE_DIRECT` | Allows buffer replacement using `ByteBuffer.allocateDirect(int)`.
    `static int` | `BUFFER_REPLACEMENT_MODE_DISABLED` | Disallows buffer replacement.
    `static int` | `BUFFER_REPLACEMENT_MODE_NORMAL` | Allows buffer replacement using `ByteBuffer.allocate(int)`.
    `CryptoInfo` | `cryptoInfo` | `CryptoInfo` for encrypted data.
    `ByteBuffer` | `data` | The buffer's data, or `null` if no data has been set.
    `Format` | `format` | The `Format`.
    `ByteBuffer` | `supplementalData` | Supplemental data related to the buffer, if `Buffer.hasSupplementalData()` returns true.
    `long` | `timeUs` | The time at which the sample should be presented.
    `boolean` | `waitingForKeys` | Whether the last attempt to read a sample into this buffer failed due to not yet having the DRM keys associated with the next sample.

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `DecoderInputBuffer​(@com.google.android.exoplayer2.decoder.DecoderInputBuffer.BufferReplacementMode int bufferReplacementMode)` | Creates a new instance.
    `DecoderInputBuffer​(@com.google.android.exoplayer2.decoder.DecoderInputBuffer.BufferReplacementMode int bufferReplacementMode, int paddingSize)` | Creates a new instance.

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `clear()` | Clears the buffer.
    `void` | `ensureSpaceForWrite​(int length)` | Ensures that `data` is large enough to accommodate a write of a given length at its current position.
    `void` | `flip()` | Flips `data` and `supplementalData` in preparation for being queued to a decoder.
    `boolean` | `isEncrypted()` | Returns whether the `C.BUFFER_FLAG_ENCRYPTED` flag is set.
    `static DecoderInputBuffer` | `newNoDataInstance()` | Returns a new instance that's not able to hold any data.
    `void` | `resetSupplementalData​(int length)` | Clears `supplementalData` and ensures that it's large enough to accommodate `length` bytes.

    - ### Methods inherited from class com.google.android.exoplayer2.decoder.Buffer

      `addFlag, clearFlag, getFlag, hasSupplementalData, isDecodeOnly, isEndOfStream, isFirstSample, isKeyFrame, setFlags`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### BUFFER_REPLACEMENT_MODE_DISABLED

          public static final int BUFFER_REPLACEMENT_MODE_DISABLED

      Disallows buffer replacement.
      See Also:
        Constant Field Values

    - #### BUFFER_REPLACEMENT_MODE_NORMAL

          public static final int BUFFER_REPLACEMENT_MODE_NORMAL

      Allows buffer replacement using `ByteBuffer.allocate(int)`.
      See Also:
        Constant Field Values

    - #### BUFFER_REPLACEMENT_MODE_DIRECT

          public static final int BUFFER_REPLACEMENT_MODE_DIRECT

      Allows buffer replacement using `ByteBuffer.allocateDirect(int)`.
      See Also:
        Constant Field Values

    - #### format

          @Nullable
          public Format format

      The `Format`.

    - #### cryptoInfo

          public final CryptoInfo cryptoInfo

      `CryptoInfo` for encrypted data.

    - #### data

          @Nullable
          public ByteBuffer data

      The buffer's data, or `null` if no data has been set.

    - #### waitingForKeys

          public boolean waitingForKeys

      Whether the last attempt to read a sample into this buffer failed due to not yet having the DRM keys associated with the next sample.

    - #### timeUs

          public long timeUs

      The time at which the sample should be presented.

    - #### supplementalData

          @Nullable
          public ByteBuffer supplementalData

      Supplemental data related to the buffer, if `Buffer.hasSupplementalData()` returns true. If present, the buffer is populated with supplemental data from position 0 to its limit.

  - ### Constructor Detail

    - #### DecoderInputBuffer

          public DecoderInputBuffer​(@com.google.android.exoplayer2.decoder.DecoderInputBuffer.BufferReplacementMode int bufferReplacementMode)

      Creates a new instance.
      Parameters:
        `bufferReplacementMode` - The `DecoderInputBuffer.BufferReplacementMode` replacement mode.

    - #### DecoderInputBuffer

          public DecoderInputBuffer​(@com.google.android.exoplayer2.decoder.DecoderInputBuffer.BufferReplacementMode int bufferReplacementMode,
                                    int paddingSize)

      Creates a new instance.
      Parameters:
        `bufferReplacementMode` - The `DecoderInputBuffer.BufferReplacementMode` replacement mode.
        `paddingSize` - If non-zero, `ensureSpaceForWrite(int)` will ensure that the buffer is this number of bytes larger than the requested length. This can be useful for decoders that consume data in fixed size blocks, for efficiency. Setting the padding size to the decoder's fixed read size is necessary to prevent such a decoder from trying to read beyond the end of the buffer.

  - ### Method Detail

    - #### newNoDataInstance

          public static DecoderInputBuffer newNoDataInstance()

      Returns a new instance that's not able to hold any data.

    - #### resetSupplementalData

          @EnsuresNonNull("supplementalData")
          public void resetSupplementalData​(int length)

      Clears `supplementalData` and ensures that it's large enough to accommodate `length` bytes.
      Parameters:
        `length` - The length of the supplemental data that must be accommodated, in bytes.

    - #### ensureSpaceForWrite

          @EnsuresNonNull("data")
          public void ensureSpaceForWrite​(int length)

      Ensures that `data` is large enough to accommodate a write of a given length at its current position.

      If the capacity of `data` is sufficient this method does nothing. If the capacity is insufficient then an attempt is made to replace `data` with a new `ByteBuffer` whose capacity is sufficient. Data up to the current position is copied to the new buffer.

      Parameters:
        `length` - The length of the write that must be accommodated, in bytes.
      Throws:
        `DecoderInputBuffer.InsufficientCapacityException` - If there is insufficient capacity to accommodate the write and `bufferReplacementMode` is `BUFFER_REPLACEMENT_MODE_DISABLED`.

    - #### isEncrypted

          public final boolean isEncrypted()

      Returns whether the `C.BUFFER_FLAG_ENCRYPTED` flag is set.

    - #### flip

          public final void flip()

      Flips `data` and `supplementalData` in preparation for being queued to a decoder.
      See Also:
        `Buffer.flip()`

    - #### clear

          public void clear()

      Description copied from class: `Buffer`
      Clears the buffer.
      Overrides:
        `clear` in class `Buffer`