FlacFrameReader


@UnstableApi
public final class FlacFrameReader


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

Summary

Nested types

Holds a sample number.

Public methods

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.

Public methods

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
ParsableByteArray data

The array to read the data from, whose position must correspond to the frame header.

FlacStreamMetadata flacStreamMetadata

The stream metadata.

int frameStartMarker

The frame start marker of the stream.

FlacFrameReader.SampleNumberHolder sampleNumberHolder

The holder used to contain the sample number.

Returns
boolean

Whether the frame header is valid.

checkFrameHeaderFromPeek

public 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.

The input peek position is left unchanged.

Parameters
ExtractorInput input

The input to get the data from, whose peek position must correspond to the frame header.

FlacStreamMetadata flacStreamMetadata

The stream metadata.

int frameStartMarker

The frame start marker of the stream.

FlacFrameReader.SampleNumberHolder sampleNumberHolder

The holder used to contain the sample number.

Returns
boolean

Whether the frame header is valid.

getFirstSampleNumber

public static long getFirstSampleNumber(
    ExtractorInput input,
    FlacStreamMetadata flacStreamMetadata
)

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
ExtractorInput input

Input stream to get the sample number from (starting from the read position).

FlacStreamMetadata flacStreamMetadata

The FLAC metadata of the stream.

Returns
long

The frame first sample number.

Throws
androidx.media3.common.ParserException

If an error occurs parsing the sample number.

java.io.IOException

If peeking from the input fails.

readFrameBlockSizeSamplesFromKey

public static int readFrameBlockSizeSamplesFromKey(
    ParsableByteArray data,
    int blockSizeKey
)

Reads the given block size.

Parameters
ParsableByteArray data

The array to read the data from, whose position must correspond to the block size bits.

int blockSizeKey

The key in the block size lookup table.

Returns
int

The block size in samples, or -1 if the blockSizeKey is invalid.