Package com.google.android.exoplayer2.extractor

## Class FlacMetadataReader

- java.lang.Object
- - com.google.android.exoplayer2.extractor.FlacMetadataReader

-     public final class FlacMetadataReader
      extends Object

  Reads and peeks FLAC stream metadata elements according to the FLAC format specification.

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class | Description
    --- | --- | ---
    `static class` | `FlacMetadataReader.FlacStreamMetadataHolder` | Holds a `FlacStreamMetadata`.

  - ### Method Summary

    All Methods Static Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `static boolean` | `checkAndPeekStreamMarker​(ExtractorInput input)` | Peeks the FLAC stream marker.
    `static int` | `getFrameStartMarker​(ExtractorInput input)` | Returns the frame start marker, consisting of the 2 first bytes of the first frame.
    `static Metadata` | `peekId3Metadata​(ExtractorInput input, boolean parseData)` | Peeks ID3 Data.
    `static Metadata` | `readId3Metadata​(ExtractorInput input, boolean parseData)` | Reads ID3 Data.
    `static boolean` | `readMetadataBlock​(ExtractorInput input, FlacMetadataReader.FlacStreamMetadataHolder metadataHolder)` | Reads one FLAC metadata block.
    `static FlacStreamMetadata.SeekTable` | `readSeekTableMetadataBlock​(ParsableByteArray data)` | Reads a FLAC seek table metadata block.
    `static void` | `readStreamMarker​(ExtractorInput input)` | Reads the FLAC stream marker.

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

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

- - ### Method Detail

    - #### peekId3Metadata

          @Nullable
          public static Metadata peekId3Metadata​(ExtractorInput input,
                                                 boolean parseData)
                                          throws IOException

      Peeks ID3 Data.
      Parameters:
        `input` - Input stream to peek the ID3 data from.
        `parseData` - Whether to parse the ID3 frames.
      Returns:
        The parsed ID3 data, or `null` if there is no such data or if `parseData` is `false`.
      Throws:
        `IOException` - If peeking from the input fails. In this case, there is no guarantee on the peek position.

    - #### checkAndPeekStreamMarker

          public static boolean checkAndPeekStreamMarker​(ExtractorInput input)
                                                  throws IOException

      Peeks the FLAC stream marker.
      Parameters:
        `input` - Input stream to peek the stream marker from.
      Returns:
        Whether the data peeked is the FLAC stream marker.
      Throws:
        `IOException` - If peeking from the input fails. In this case, the peek position is left unchanged.

    - #### readId3Metadata

          @Nullable
          public static Metadata readId3Metadata​(ExtractorInput input,
                                                 boolean parseData)
                                          throws IOException

      Reads ID3 Data.

      If no exception is thrown, the peek position of `input` is aligned with the read position.

      Parameters:
        `input` - Input stream to read the ID3 data from.
        `parseData` - Whether to parse the ID3 frames.
      Returns:
        The parsed ID3 data, or `null` if there is no such data or if `parseData` is `false`.
      Throws:
        `IOException` - If reading from the input fails. In this case, the read position is left unchanged and there is no guarantee on the peek position.

    - #### readStreamMarker

          public static void readStreamMarker​(ExtractorInput input)
                                       throws IOException

      Reads the FLAC stream marker.
      Parameters:
        `input` - Input stream to read the stream marker from.
      Throws:
        `ParserException` - If an error occurs parsing the stream marker. In this case, the position of `input` is advanced by `FlacConstants.STREAM_MARKER_SIZE` bytes.
        `IOException` - If reading from the input fails. In this case, the position is left unchanged.

    - #### readMetadataBlock

          public static boolean readMetadataBlock​(ExtractorInput input,
                                                  FlacMetadataReader.FlacStreamMetadataHolder metadataHolder)
                                           throws IOException

      Reads one FLAC metadata block.

      If no exception is thrown, the peek position of `input` is aligned with the read position.

      Parameters:
        `input` - Input stream to read the metadata block from (header included).
        `metadataHolder` - A holder for the metadata read. If the stream info block (which must be the first metadata block) is read, the holder contains a new instance representing the stream info data. If the block read is a Vorbis comment block or a picture block, the holder contains a copy of the existing stream metadata with the corresponding metadata added. Otherwise, the metadata in the holder is unchanged.
      Returns:
        Whether the block read is the last metadata block.
      Throws:
        `IllegalArgumentException` - If the block read is not a stream info block and the metadata in `metadataHolder` is `null`. In this case, the read position will be at the start of a metadata block and there is no guarantee on the peek position.
        `IOException` - If reading from the input fails. In this case, the read position will be at the start of a metadata block and there is no guarantee on the peek position.

    - #### readSeekTableMetadataBlock

          public static FlacStreamMetadata.SeekTable readSeekTableMetadataBlock​(ParsableByteArray data)

      Reads a FLAC seek table metadata block.

      The position of `data` is moved to the byte following the seek table metadata block (placeholder points included).

      Parameters:
        `data` - The array to read the data from, whose position must correspond to the seek table metadata block (header included).
      Returns:
        The seek table, without the placeholder points.

    - #### getFrameStartMarker

          public static int getFrameStartMarker​(ExtractorInput input)
                                         throws IOException

      Returns the frame start marker, consisting of the 2 first bytes of the first frame.

      The read position of `input` is left unchanged and the peek position is aligned with the read position.

      Parameters:
        `input` - Input stream to get the start marker from (starting from the read position).
      Returns:
        The frame start marker (which must be the same for all the frames in the stream).
      Throws:
        `ParserException` - If an error occurs parsing the frame start marker.
        `IOException` - If peeking from the input fails.