Package com.google.android.exoplayer2.extractor

## Class FlacFrameReader

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

-     public final class FlacFrameReader
      extends Object

  Reads and peeks FLAC frame elements according to the FLAC format specification.

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class | Description
    --- | --- | ---
    `static class` | `FlacFrameReader.SampleNumberHolder` | Holds a sample number.

  - ### Method Summary

    All Methods Static Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `static boolean` | `checkAndReadFrameHeader​(ParsableByteArray data, FlacStreamMetadata flacStreamMetadata, int frameStartMarker, FlacFrameReader.SampleNumberHolder sampleNumberHolder)` | Checks whether the given FLAC frame header is valid and, if so, reads it and writes the frame first sample number in `sampleNumberHolder`.
    `static boolean` | `checkFrameHeaderFromPeek​(ExtractorInput input, FlacStreamMetadata flacStreamMetadata, int frameStartMarker, FlacFrameReader.SampleNumberHolder sampleNumberHolder)` | Checks whether the given FLAC frame header is valid and, if so, writes the frame first sample number in `sampleNumberHolder`.
    `static long` | `getFirstSampleNumber​(ExtractorInput input, FlacStreamMetadata flacStreamMetadata)` | Returns the number of the first sample in the given frame.
    `static int` | `readFrameBlockSizeSamplesFromKey​(ParsableByteArray data, int blockSizeKey)` | Reads the given block size.

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

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

- - ### Method Detail

    - #### checkAndReadFrameHeader

          public static boolean checkAndReadFrameHeader​(ParsableByteArray data,
                                                        FlacStreamMetadata flacStreamMetadata,
                                                        int frameStartMarker,
                                                        FlacFrameReader.SampleNumberHolder sampleNumberHolder)

      Checks whether the given FLAC frame header is valid and, if so, reads it and writes the frame first sample number in `sampleNumberHolder`.

      If the header is valid, the position of `data` is moved to the byte following it. Otherwise, there is no guarantee on the position.

      Parameters:
        `data` - The array to read the data from, whose position must correspond to the frame header.
        `flacStreamMetadata` - The stream metadata.
        `frameStartMarker` - The frame start marker of the stream.
        `sampleNumberHolder` - The holder used to contain the sample number.
      Returns:
        Whether the frame header is valid.

    - #### checkFrameHeaderFromPeek

          public static boolean checkFrameHeaderFromPeek​(ExtractorInput input,
                                                         FlacStreamMetadata flacStreamMetadata,
                                                         int frameStartMarker,
                                                         FlacFrameReader.SampleNumberHolder sampleNumberHolder)
                                                  throws IOException

      Checks whether the given FLAC frame header is valid and, if so, writes the frame first sample number in `sampleNumberHolder`.

      The `input` peek position is left unchanged.

      Parameters:
        `input` - The input to get the data from, whose peek position must correspond to the frame header.
        `flacStreamMetadata` - The stream metadata.
        `frameStartMarker` - The frame start marker of the stream.
        `sampleNumberHolder` - The holder used to contain the sample number.
      Returns:
        Whether the frame header is valid.
      Throws:
        `IOException`

    - #### getFirstSampleNumber

          public static long getFirstSampleNumber​(ExtractorInput input,
                                                  FlacStreamMetadata flacStreamMetadata)
                                           throws IOException

      Returns the number of the first sample in the given frame.

      The read position of `input` is left unchanged.

      If no exception is thrown, the peek position is aligned with the read position. Otherwise, there is no guarantee on the peek position.

      Parameters:
        `input` - Input stream to get the sample number from (starting from the read position).
      Returns:
        The frame first sample number.
      Throws:
        `ParserException` - If an error occurs parsing the sample number.
        `IOException` - If peeking from the input fails.

    - #### readFrameBlockSizeSamplesFromKey

          public static int readFrameBlockSizeSamplesFromKey​(ParsableByteArray data,
                                                             int blockSizeKey)

      Reads the given block size.
      Parameters:
        `data` - The array to read the data from, whose position must correspond to the block size bits.
        `blockSizeKey` - The key in the block size lookup table.
      Returns:
        The block size in samples, or -1 if the `blockSizeKey` is invalid.