summaryrefslogtreecommitdiffstats
path: root/libjava/classpath/gnu/javax/sound/sampled/gstreamer/io/GstAudioFileReaderNativePeer.java
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/classpath/gnu/javax/sound/sampled/gstreamer/io/GstAudioFileReaderNativePeer.java')
-rw-r--r--libjava/classpath/gnu/javax/sound/sampled/gstreamer/io/GstAudioFileReaderNativePeer.java56
1 files changed, 32 insertions, 24 deletions
diff --git a/libjava/classpath/gnu/javax/sound/sampled/gstreamer/io/GstAudioFileReaderNativePeer.java b/libjava/classpath/gnu/javax/sound/sampled/gstreamer/io/GstAudioFileReaderNativePeer.java
index 45ae4ff8588..761720fee5d 100644
--- a/libjava/classpath/gnu/javax/sound/sampled/gstreamer/io/GstAudioFileReaderNativePeer.java
+++ b/libjava/classpath/gnu/javax/sound/sampled/gstreamer/io/GstAudioFileReaderNativePeer.java
@@ -38,6 +38,7 @@ exception statement from your version. */
package gnu.javax.sound.sampled.gstreamer.io;
+import gnu.classpath.Pointer;
import gnu.javax.sound.sampled.gstreamer.GStreamerMixer;
import java.io.BufferedInputStream;
@@ -90,8 +91,11 @@ final class GstAudioFileReaderNativePeer
public String isSigned = null;
public String layer = null;
+
public String bitrate = null;
+
public String framed = null;
+
public String type = null;
}
@@ -108,18 +112,7 @@ final class GstAudioFileReaderNativePeer
public static AudioFormat getAudioFormat(InputStream is) throws Exception
{
- GstHeader header = new GstHeader();
-
- BufferedInputStream stream = new BufferedInputStream(is);
- if(!stream.markSupported())
- throw new IOException("Stream must support marking.");
-
- stream.mark(0);
-
- if (!gstreamer_get_audio_format_stream(header, stream))
- return null;
-
- return getAudioFormat(header);
+ return getAudioFormat(is, new GstHeader());
}
public static AudioFormat getAudioFormat(URL url) throws Exception
@@ -127,13 +120,20 @@ final class GstAudioFileReaderNativePeer
GstHeader header = new GstHeader();
header.file = url.toExternalForm();
- BufferedInputStream stream = new BufferedInputStream(url.openStream());
+ return getAudioFormat(url.openStream(), header);
+ }
+
+ private static AudioFormat getAudioFormat(InputStream is, GstHeader header)
+ throws Exception
+ {
+ BufferedInputStream stream = new BufferedInputStream(is);
if(!stream.markSupported())
throw new IOException("Stream must support marking.");
stream.mark(0);
- if (!gstreamer_get_audio_format_stream(header, stream))
+ if (!gstreamer_get_audio_format_stream(header, new GstInputStream(stream).
+ getNativeClass()))
return null;
return getAudioFormat(header);
@@ -200,27 +200,31 @@ final class GstAudioFileReaderNativePeer
bigEndian = true;
}
+ String ext = null;
+
int frameSize = na;
float frameRate = na;
String lowerCase = header.name.toLowerCase();
// FIXME: frameRate = sampleRate in these cases under all the tests so far
// but I'm not sure if this is always correct...
- if (lowerCase.contains("law") || lowerCase.contains("au") ||
- lowerCase.contains("x-au"))
+ if (lowerCase.contains("law") || lowerCase.contains("au"))
{
frameSize = (sampleSizeInBits >> 3) * channels;
frameRate = sampleRate;
+ ext = "au";
}
else if (lowerCase.contains("wav"))
{
frameSize = ((sampleSizeInBits + 7) / 8) * channels;
frameRate = sampleRate;
+ ext = "wav";
}
else if (lowerCase.contains("iff"))
{
frameSize = (sampleSizeInBits * channels) / 8;
frameRate = sampleRate;
+ ext = "aiff";
}
// write all the additional properties we got to identify
@@ -228,6 +232,9 @@ final class GstAudioFileReaderNativePeer
Map<String, Object> properties = new HashMap<String, Object>();
properties.put(GStreamerMixer.GST_BACKEND, true);
properties.put(GStreamerMixer.GST_DECODER, header.name);
+ properties.put(GStreamerMixer.GST_TYPE_NAME, encoding.toString());
+ if (ext != null)
+ properties.put(GStreamerMixer.GST_FILE_EXTENSION, ext);
/* now we put in some of the additional properties if we have them */
if (header.type != null) properties.put("type", header.type);
@@ -251,26 +258,27 @@ final class GstAudioFileReaderNativePeer
/* ***** native methods ***** */
/**
- * Retrieve header information about the file being played.
- *
- * @param info
- * @return
+ * Retrieve header information about the stream being played.
*/
native static final
protected boolean gstreamer_get_audio_format_stream(GstHeader info,
- BufferedInputStream istream);
+ Pointer pointer);
/**
* Retrieve header information about the file being played.
- *
- * @param info
- * @return
*/
native static final
protected boolean gstreamer_get_audio_format_file(GstHeader info);
+ /**
+ * Initialize the native peer and enables the object cache.
+ * It is meant to be used by the static initializer.
+ */
+ native private static final void init_id_cache();
+
static
{
System.loadLibrary("gstreamerpeer"); //$NON-NLS-1$
+ init_id_cache();
}
}
OpenPOWER on IntegriCloud