diff options
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.java | 56 |
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(); } } |

