Package com.google.android.exoplayer2.extractor

## Class FlacStreamMetadata

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

-     public final class FlacStreamMetadata
      extends Object

  Holder for FLAC metadata.
  See Also:
    FLAC format METADATA_BLOCK_STREAMINFO, FLAC format METADATA_BLOCK_SEEKTABLE, FLAC format METADATA_BLOCK_VORBIS_COMMENT, FLAC format METADATA_BLOCK_PICTURE

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class | Description
    --- | --- | ---
    `static class` | `FlacStreamMetadata.SeekTable` | A FLAC seek table.

  - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `int` | `bitsPerSample` | Number of bits per sample.
    `int` | `bitsPerSampleLookupKey` | Lookup key corresponding to the number of bits per sample of the stream, or `NOT_IN_LOOKUP_TABLE` if it is not in the lookup table.
    `int` | `channels` | Number of audio channels.
    `int` | `maxBlockSizeSamples` | Maximum number of samples per block.
    `int` | `maxFrameSize` | Maximum frame size in bytes, or 0 if the value is unknown.
    `int` | `minBlockSizeSamples` | Minimum number of samples per block.
    `int` | `minFrameSize` | Minimum frame size in bytes, or 0 if the value is unknown.
    `static int` | `NOT_IN_LOOKUP_TABLE` | Indicates that a value is not in the corresponding lookup table.
    `int` | `sampleRate` | Sample rate in Hertz.
    `int` | `sampleRateLookupKey` | Lookup key corresponding to the stream sample rate, or `NOT_IN_LOOKUP_TABLE` if it is not in the lookup table.
    `FlacStreamMetadata.SeekTable` | `seekTable` | Seek table, or `null` if it is not provided.
    `long` | `totalSamples` | Total number of samples, or 0 if the value is unknown.

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `FlacStreamMetadata​(byte[] data, int offset)` | Parses binary FLAC stream info metadata.
    `FlacStreamMetadata​(int minBlockSizeSamples, int maxBlockSizeSamples, int minFrameSize, int maxFrameSize, int sampleRate, int channels, int bitsPerSample, long totalSamples, ArrayList<String> vorbisComments, ArrayList<PictureFrame> pictureFrames)` |

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `FlacStreamMetadata` | `copyWithPictureFrames​(List<PictureFrame> pictureFrames)` | Returns a copy of `this` with the given picture frames added to the metadata.
    `FlacStreamMetadata` | `copyWithSeekTable​(FlacStreamMetadata.SeekTable seekTable)` | Returns a copy of `this` with the seek table replaced by the one given.
    `FlacStreamMetadata` | `copyWithVorbisComments​(List<String> vorbisComments)` | Returns a copy of `this` with the given Vorbis comments added to the metadata.
    `long` | `getApproxBytesPerFrame()` | Returns the approximate number of bytes per frame for the current FLAC stream.
    `int` | `getDecodedBitrate()` | Returns the bitrate of the stream after it's decoded into PCM.
    `long` | `getDurationUs()` | Returns the duration of the FLAC stream in microseconds, or `C.TIME_UNSET` if the total number of samples if unknown.
    `Format` | `getFormat​(byte[] streamMarkerAndInfoBlock, Metadata id3Metadata)` | Returns a `Format` extracted from the FLAC stream metadata.
    `int` | `getMaxDecodedFrameSize()` | Returns the maximum size for a decoded frame from the FLAC stream.
    `Metadata` | `getMetadataCopyWithAppendedEntriesFrom​(Metadata other)` | Returns a copy of the content metadata with entries from `other` appended.
    `long` | `getSampleNumber​(long timeUs)` | Returns the sample number of the sample at a given time.

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

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

- - ### Field Detail

    - #### NOT_IN_LOOKUP_TABLE

          public static final int NOT_IN_LOOKUP_TABLE

      Indicates that a value is not in the corresponding lookup table.
      See Also:
        Constant Field Values

    - #### minBlockSizeSamples

          public final int minBlockSizeSamples

      Minimum number of samples per block.

    - #### maxBlockSizeSamples

          public final int maxBlockSizeSamples

      Maximum number of samples per block.

    - #### minFrameSize

          public final int minFrameSize

      Minimum frame size in bytes, or 0 if the value is unknown.

    - #### maxFrameSize

          public final int maxFrameSize

      Maximum frame size in bytes, or 0 if the value is unknown.

    - #### sampleRate

          public final int sampleRate

      Sample rate in Hertz.

    - #### sampleRateLookupKey

          public final int sampleRateLookupKey

      Lookup key corresponding to the stream sample rate, or `NOT_IN_LOOKUP_TABLE` if it is not in the lookup table.

      This key is used to indicate the sample rate in the frame header for the most common values.

      The sample rate lookup table is described in https://xiph.org/flac/format.html#frame_header.

    - #### channels

          public final int channels

      Number of audio channels.

    - #### bitsPerSample

          public final int bitsPerSample

      Number of bits per sample.

    - #### bitsPerSampleLookupKey

          public final int bitsPerSampleLookupKey

      Lookup key corresponding to the number of bits per sample of the stream, or `NOT_IN_LOOKUP_TABLE` if it is not in the lookup table.

      This key is used to indicate the number of bits per sample in the frame header for the most common values.

      The sample size lookup table is described in https://xiph.org/flac/format.html#frame_header.

    - #### totalSamples

          public final long totalSamples

      Total number of samples, or 0 if the value is unknown.

    - #### seekTable

          @Nullable
          public final FlacStreamMetadata.SeekTable seekTable

      Seek table, or `null` if it is not provided.

  - ### Constructor Detail

    - #### FlacStreamMetadata

          public FlacStreamMetadata​(byte[] data,
                                    int offset)

      Parses binary FLAC stream info metadata.
      Parameters:
        `data` - An array containing binary FLAC stream info block.
        `offset` - The offset of the stream info block in `data`, excluding the header (i.e. the offset points to the first byte of the minimum block size).

    - #### FlacStreamMetadata

          public FlacStreamMetadata​(int minBlockSizeSamples,
                                    int maxBlockSizeSamples,
                                    int minFrameSize,
                                    int maxFrameSize,
                                    int sampleRate,
                                    int channels,
                                    int bitsPerSample,
                                    long totalSamples,
                                    ArrayList<String> vorbisComments,
                                    ArrayList<PictureFrame> pictureFrames)

  - ### Method Detail

    - #### getMaxDecodedFrameSize

          public int getMaxDecodedFrameSize()

      Returns the maximum size for a decoded frame from the FLAC stream.

    - #### getDecodedBitrate

          public int getDecodedBitrate()

      Returns the bitrate of the stream after it's decoded into PCM.

    - #### getDurationUs

          public long getDurationUs()

      Returns the duration of the FLAC stream in microseconds, or `C.TIME_UNSET` if the total number of samples if unknown.

    - #### getSampleNumber

          public long getSampleNumber​(long timeUs)

      Returns the sample number of the sample at a given time.
      Parameters:
        `timeUs` - Time position in microseconds in the FLAC stream.
      Returns:
        The sample number corresponding to the time position.

    - #### getApproxBytesPerFrame

          public long getApproxBytesPerFrame()

      Returns the approximate number of bytes per frame for the current FLAC stream.

    - #### getFormat

          public Format getFormat​(byte[] streamMarkerAndInfoBlock,
                                  @Nullable
                                  Metadata id3Metadata)

      Returns a `Format` extracted from the FLAC stream metadata.

      `streamMarkerAndInfoBlock` is updated to set the bit corresponding to the stream info last metadata block flag to true.

      Parameters:
        `streamMarkerAndInfoBlock` - An array containing the FLAC stream marker followed by the stream info block.
        `id3Metadata` - The ID3 metadata of the stream, or `null` if there is no such data.
      Returns:
        The extracted `Format`.

    - #### getMetadataCopyWithAppendedEntriesFrom

          @Nullable
          public Metadata getMetadataCopyWithAppendedEntriesFrom​(@Nullable
                                                                 Metadata other)

      Returns a copy of the content metadata with entries from `other` appended.

    - #### copyWithSeekTable

          public FlacStreamMetadata copyWithSeekTable​(@Nullable
                                                      FlacStreamMetadata.SeekTable seekTable)

      Returns a copy of `this` with the seek table replaced by the one given.

    - #### copyWithVorbisComments

          public FlacStreamMetadata copyWithVorbisComments​(List<String> vorbisComments)

      Returns a copy of `this` with the given Vorbis comments added to the metadata.

    - #### copyWithPictureFrames

          public FlacStreamMetadata copyWithPictureFrames​(List<PictureFrame> pictureFrames)

      Returns a copy of `this` with the given picture frames added to the metadata.