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 classFlacMetadataReader.FlacStreamMetadataHolderHolds aFlacStreamMetadata.
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static booleancheckAndPeekStreamMarker(ExtractorInput input)Peeks the FLAC stream marker.static intgetFrameStartMarker(ExtractorInput input)Returns the frame start marker, consisting of the 2 first bytes of the first frame.static MetadatapeekId3Metadata(ExtractorInput input, boolean parseData)Peeks ID3 Data.static MetadatareadId3Metadata(ExtractorInput input, boolean parseData)Reads ID3 Data.static booleanreadMetadataBlock(ExtractorInput input, FlacMetadataReader.FlacStreamMetadataHolder metadataHolder)Reads one FLAC metadata block.static FlacStreamMetadata.SeekTablereadSeekTableMetadataBlock(ParsableByteArray data)Reads a FLAC seek table metadata block.static voidreadStreamMarker(ExtractorInput input)Reads the FLAC stream marker.
-
-
-
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
nullif there is no such data or ifparseDataisfalse. - 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
inputis 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
nullif there is no such data or ifparseDataisfalse. - 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 ofinputis advanced byFlacConstants.STREAM_MARKER_SIZEbytes.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
inputis 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 inmetadataHolderisnull. 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
datais 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
inputis 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.
-
-