Package com.google.android.exoplayer2.extractor

## Interface TrackOutput

- All Known Implementing Classes:
    `DummyTrackOutput`, `FakeTrackOutput`, `PlayerEmsgHandler.PlayerTrackEmsgHandler`, `SampleQueue`

      public interface TrackOutput

  Receives track level data extracted by an `Extractor`.

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Interface | Description
    --- | --- | ---
    `static class` | `TrackOutput.CryptoData` | Holds data required to decrypt a sample.
    `static interface` | `TrackOutput.SampleDataPart` | Defines the part of the sample data to which a call to `sampleData(com.google.android.exoplayer2.upstream.DataReader, int, boolean)` corresponds.

  - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `static int` | `SAMPLE_DATA_PART_ENCRYPTION` | Sample encryption data.
    `static int` | `SAMPLE_DATA_PART_MAIN` | Main media sample data.
    `static int` | `SAMPLE_DATA_PART_SUPPLEMENTAL` | Sample supplemental data.

  - ### Method Summary

    All Methods Instance Methods Abstract Methods Default Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `format​(Format format)` | Called when the `Format` of the track has been extracted from the stream.
    `default int` | `sampleData​(DataReader input, int length, boolean allowEndOfInput)` | Equivalent to `sampleData(input, length, allowEndOfInput, SAMPLE_DATA_PART_MAIN)`.
    `int` | `sampleData​(DataReader input, int length, boolean allowEndOfInput, int sampleDataPart)` | Called to write sample data to the output.
    `default void` | `sampleData​(ParsableByteArray data, int length)` | Equivalent to `sampleData(ParsableByteArray, int, int)` sampleData(data, length, SAMPLE_DATA_PART_MAIN)}.
    `void` | `sampleData​(ParsableByteArray data, int length, int sampleDataPart)` | Called to write sample data to the output.
    `void` | `sampleMetadata​(long timeUs, int flags, int size, int offset, TrackOutput.CryptoData cryptoData)` | Called when metadata associated with a sample has been extracted from the stream.

- - ### Field Detail

    - #### SAMPLE_DATA_PART_MAIN

          static final int SAMPLE_DATA_PART_MAIN

      Main media sample data.
      See Also:
        Constant Field Values

    - #### SAMPLE_DATA_PART_ENCRYPTION

          static final int SAMPLE_DATA_PART_ENCRYPTION

      Sample encryption data.

      The format for encryption information is:

      - (1 byte) `encryption_signal_byte`: Most significant bit signals whether the encryption data contains subsample encryption data. The remaining bits contain `initialization_vector_size`.
      - (`initialization_vector_size` bytes) Initialization vector.
      - If subsample encryption data is present, as per `encryption_signal_byte`, the encryption data also contains:
        - (2 bytes) `subsample_encryption_data_length`.
        - (`subsample_encryption_data_length * 6` bytes) Subsample encryption data (repeated `subsample_encryption_data_length` times:
          - (2 bytes) Size of a clear section in sample.
          - (4 bytes) Size of an encryption section in sample.
      See Also:
        Constant Field Values

    - #### SAMPLE_DATA_PART_SUPPLEMENTAL

          static final int SAMPLE_DATA_PART_SUPPLEMENTAL

      Sample supplemental data.

      If a sample contains supplemental data, the format of the entire sample data will be:

      - If the sample has the `C.BUFFER_FLAG_ENCRYPTED` flag set, all encryption information.
      - (4 bytes) `sample_data_size`: The size of the actual sample data, not including supplemental data or encryption information.
      - (`sample_data_size` bytes): The media sample data.
      - (remaining bytes) The supplemental data.
      See Also:
        Constant Field Values

  - ### Method Detail

    - #### format

          void format​(Format format)

      Called when the `Format` of the track has been extracted from the stream.
      Parameters:
        `format` - The extracted `Format`.

    - #### sampleData

          default int sampleData​(DataReader input,
                                 int length,
                                 boolean allowEndOfInput)
                          throws IOException

      Equivalent to `sampleData(input, length, allowEndOfInput, SAMPLE_DATA_PART_MAIN)`.
      Throws:
        `IOException`

    - #### sampleData

          default void sampleData​(ParsableByteArray data,
                                  int length)

      Equivalent to `sampleData(ParsableByteArray, int, int)` sampleData(data, length, SAMPLE_DATA_PART_MAIN)}.

    - #### sampleData

          int sampleData​(DataReader input,
                         int length,
                         boolean allowEndOfInput,
                         @SampleDataPart
                         int sampleDataPart)
                  throws IOException

      Called to write sample data to the output.
      Parameters:
        `input` - A `DataReader` from which to read the sample data.
        `length` - The maximum length to read from the input.
        `allowEndOfInput` - True if encountering the end of the input having read no data is allowed, and should result in `C.RESULT_END_OF_INPUT` being returned. False if it should be considered an error, causing an `EOFException` to be thrown.
        `sampleDataPart` - The part of the sample data to which this call corresponds.
      Returns:
        The number of bytes appended.
      Throws:
        `IOException` - If an error occurred reading from the input.

    - #### sampleData

          void sampleData​(ParsableByteArray data,
                          int length,
                          @SampleDataPart
                          int sampleDataPart)

      Called to write sample data to the output.
      Parameters:
        `data` - A `ParsableByteArray` from which to read the sample data.
        `length` - The number of bytes to read, starting from `data.getPosition()`.
        `sampleDataPart` - The part of the sample data to which this call corresponds.

    - #### sampleMetadata

          void sampleMetadata​(long timeUs,
                              @BufferFlags
                              int flags,
                              int size,
                              int offset,
                              @Nullable
                              TrackOutput.CryptoData cryptoData)

      Called when metadata associated with a sample has been extracted from the stream.

      The corresponding sample data will have already been passed to the output via calls to `sampleData(DataReader, int, boolean)` or `sampleData(ParsableByteArray, int)`.

      Parameters:
        `timeUs` - The media timestamp associated with the sample, in microseconds.
        `flags` - Flags associated with the sample. See `C.BUFFER_FLAG_*`.
        `size` - The size of the sample data, in bytes.
        `offset` - The number of bytes that have been passed to `sampleData(DataReader, int, boolean)` or `sampleData(ParsableByteArray, int)` since the last byte belonging to the sample whose metadata is being passed.
        `cryptoData` - The encryption data required to decrypt the sample. May be null.