X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsonitus%2Fio%2FIdentifyingInputStream.java;h=3a4a9fb7cd139784e37db92e0b02d2e85921db0a;hb=49aade1295ee9893f2561d8d2ef0812e917087d1;hp=faf4f01d119a7014a6c9171fc95aea786082ac01;hpb=865e9a8fce99285dfd6c1efb6a01991076e1a773;p=sonitus.git diff --git a/src/main/java/net/pterodactylus/sonitus/io/IdentifyingInputStream.java b/src/main/java/net/pterodactylus/sonitus/io/IdentifyingInputStream.java index faf4f01..3a4a9fb 100644 --- a/src/main/java/net/pterodactylus/sonitus/io/IdentifyingInputStream.java +++ b/src/main/java/net/pterodactylus/sonitus/io/IdentifyingInputStream.java @@ -17,6 +17,7 @@ package net.pterodactylus.sonitus.io; +import java.io.EOFException; import java.io.FilterInputStream; import java.io.IOException; import java.io.InputStream; @@ -83,18 +84,37 @@ public class IdentifyingInputStream extends FilterInputStream { /* remember everything we read here. */ RememberingInputStream rememberingInputStream = new RememberingInputStream(inputStream); - /* try Ogg Vorbis first. */ - Optional metadata = OggVorbisIdentifier.identify(rememberingInputStream); - if (metadata.isPresent()) { - return Optional.of(new IdentifyingInputStream(rememberingInputStream.remembered(), metadata.get())); + /* first, try formats with unambiguous layouts. */ + try { + Optional metadata = FlacIdentifier.identify(rememberingInputStream); + if (metadata.isPresent()) { + return Optional.of(new IdentifyingInputStream(rememberingInputStream.remembered(), metadata.get())); + } + } catch (EOFException eofe1) { + /* ignore. */ } - /* try MP3 now. */ - rememberingInputStream = new RememberingInputStream(rememberingInputStream.remembered()); - InputStream limitedInputStream = ByteStreams.limit(rememberingInputStream, 1048576); - metadata = Mp3Identifier.identify(limitedInputStream); - if (metadata.isPresent()) { - return Optional.of(new IdentifyingInputStream(rememberingInputStream.remembered(), metadata.get())); + /* try Ogg Vorbis next. */ + try { + rememberingInputStream = new RememberingInputStream(rememberingInputStream.remembered()); + Optional metadata = OggVorbisIdentifier.identify(rememberingInputStream); + if (metadata.isPresent()) { + return Optional.of(new IdentifyingInputStream(rememberingInputStream.remembered(), metadata.get())); + } + } catch (EOFException eofe1) { + /* ignore. */ + } + + /* finally, try MP3. */ + try { + rememberingInputStream = new RememberingInputStream(rememberingInputStream.remembered()); + InputStream limitedInputStream = ByteStreams.limit(rememberingInputStream, 1048576); + Optional metadata = Mp3Identifier.identify(limitedInputStream); + if (metadata.isPresent()) { + return Optional.of(new IdentifyingInputStream(rememberingInputStream.remembered(), metadata.get())); + } + } catch (EOFException eofe1) { + /* ignore. */ } return Optional.absent();