Mercurial > hg > pulseaudio
changeset 122:d4bb2fa0df23
2008-09-12 Omair Majid <omajid@redhat.com>
* src/java/org/classpath/icedtea/pulseaudio/Eventloop.java
Fixed static initializer. Removed debug output from static initializer.
* src/java/org/classpath/icedtea/pulseaudio/Operation.java
Likewise.
* src/java/org/classpath/icedtea/pulseaudio/PulseAudioSourcePort.java
Likewise.
* src/java/org/classpath/icedtea/pulseaudio/PulseAudioTargetPort.java
Likewise.
* src/java/org/classpath/icedtea/pulseaudio/PulseAudioVolumeControl.java
Likewise.
* src/java/org/classpath/icedtea/pulseaudio/Stream.java
Likewise.
* src/java/org/classpath/icedtea/pulseaudio/PulseAudioPort.java
Likewise.
* src/java/org/classpath/icedtea/pulseaudio/PulseAudioMixer.java
Added staticSourceLineInfos and staticTargetLineInfos to store Line.Info
objects which are initialized only in the constructor. sourceLineInfos and
targetLineInfos are now rebuilt whenever the mixer is opened.
(PulseAudioMixer): Initialize static{Source,Target}LineInfos.
(close): Call refreshSourceAndTargetLines to remove the Ports.
(open): Likewise.
(refreshSourceAndTargetLines): clear the {source,target}LineInfos and use
the static version to initialize new ones.
* unittests/org/classpath/icedtea/pulseaudio/PulseAudioMixerTest.java
(testTargetLinesExist): Now tests for the existance of Port and
TargetDataLine.
(testSaneNumberOfPorts): New test. Checks that not too many ports are
exported (which whould be a bug).
(testGetTargetPortInfo): Now checks that the object is a Port and is not a
source port.
(testGetSourcePortInfo): Now checks that the ojbect is a Port ans is not a
target port.
author | Omair Majid <omajid@redhat.com> |
---|---|
date | Fri, 12 Sep 2008 12:44:34 -0400 |
parents | b10eef873d2d |
children | cd7041f7a655 |
files | src/java/org/classpath/icedtea/pulseaudio/EventLoop.java src/java/org/classpath/icedtea/pulseaudio/Operation.java src/java/org/classpath/icedtea/pulseaudio/PulseAudioMixer.java src/java/org/classpath/icedtea/pulseaudio/PulseAudioPort.java src/java/org/classpath/icedtea/pulseaudio/PulseAudioSourcePort.java src/java/org/classpath/icedtea/pulseaudio/PulseAudioTargetPort.java src/java/org/classpath/icedtea/pulseaudio/PulseAudioVolumeControl.java src/java/org/classpath/icedtea/pulseaudio/Stream.java unittests/org/classpath/icedtea/pulseaudio/PulseAudioMixerTest.java |
diffstat | 9 files changed, 162 insertions(+), 46 deletions(-) [+] |
line wrap: on
line diff
--- a/src/java/org/classpath/icedtea/pulseaudio/EventLoop.java Fri Sep 12 11:26:43 2008 -0400 +++ b/src/java/org/classpath/icedtea/pulseaudio/EventLoop.java Fri Sep 12 12:44:34 2008 -0400 @@ -110,8 +110,8 @@ String library = new java.io.File(".").getCanonicalPath() + java.io.File.separatorChar + System.mapLibraryName("pulse-java"); - System.out.println(EventLoop.class.getCanonicalName() + ": " - + library); + // System.out.println(EventLoop.class.getCanonicalName() + ": " + // + library); System.load(library); } catch (IOException e) { assert ("Loading failed".endsWith("library"));
--- a/src/java/org/classpath/icedtea/pulseaudio/Operation.java Fri Sep 12 11:26:43 2008 -0400 +++ b/src/java/org/classpath/icedtea/pulseaudio/Operation.java Fri Sep 12 12:44:34 2008 -0400 @@ -63,8 +63,8 @@ String library = new java.io.File(".").getCanonicalPath() + java.io.File.separatorChar + System.mapLibraryName("pulse-java"); - System.out.println(Operation.class.getCanonicalName() + ": " - + library); + // System.out.println(Operation.class.getCanonicalName() + ": " + // + library); System.load(library); } catch (IOException e) { assert ("Loading failed".endsWith("library"));
--- a/src/java/org/classpath/icedtea/pulseaudio/PulseAudioMixer.java Fri Sep 12 11:26:43 2008 -0400 +++ b/src/java/org/classpath/icedtea/pulseaudio/PulseAudioMixer.java Fri Sep 12 12:44:34 2008 -0400 @@ -71,7 +71,10 @@ public Thread eventLoopThread; private List<Line.Info> sourceLineInfos = new ArrayList<Line.Info>(); + private List<Line.Info> staticSourceLineInfos = new ArrayList<Line.Info>(); + private List<Line.Info> targetLineInfos = new ArrayList<Line.Info>(); + private List<Line.Info> staticTargetLineInfos = new ArrayList<Line.Info>(); private static PulseAudioMixer _instance = null; @@ -88,15 +91,15 @@ private PulseAudioMixer() { AudioFormat[] formats = getSupportedFormats(); - sourceLineInfos.add(new DataLine.Info(SourceDataLine.class, formats, - StreamBufferAttributes.MIN_VALUE, + staticSourceLineInfos.add(new DataLine.Info(SourceDataLine.class, + formats, StreamBufferAttributes.MIN_VALUE, StreamBufferAttributes.MAX_VALUE)); - sourceLineInfos.add(new DataLine.Info(Clip.class, formats, + staticSourceLineInfos.add(new DataLine.Info(Clip.class, formats, StreamBufferAttributes.MIN_VALUE, StreamBufferAttributes.MAX_VALUE)); - targetLineInfos.add(new DataLine.Info(TargetDataLine.class, formats, - StreamBufferAttributes.MIN_VALUE, + staticTargetLineInfos.add(new DataLine.Info(TargetDataLine.class, + formats, StreamBufferAttributes.MIN_VALUE, StreamBufferAttributes.MAX_VALUE)); } @@ -442,6 +445,8 @@ synchronized (lineListeners) { lineListeners.clear(); } + + refreshSourceAndTargetLines(); } @@ -592,6 +597,8 @@ // sourceLineInfo and targetLineInfo need to be updated with // port infos, which can only be obtained after EventLoop had started + refreshSourceAndTargetLines(); + for (String portName : eventLoop.updateSourcePortNameList()) { sourceLineInfos.add(new Port.Info(Port.class, portName, true)); } @@ -680,4 +687,15 @@ targetLines.remove(line); } + void refreshSourceAndTargetLines() { + + sourceLineInfos.clear(); + targetLineInfos.clear(); + + sourceLineInfos.addAll(staticSourceLineInfos); + + targetLineInfos.addAll(staticTargetLineInfos); + + } + }
--- a/src/java/org/classpath/icedtea/pulseaudio/PulseAudioPort.java Fri Sep 12 11:26:43 2008 -0400 +++ b/src/java/org/classpath/icedtea/pulseaudio/PulseAudioPort.java Fri Sep 12 12:44:34 2008 -0400 @@ -37,6 +37,8 @@ package org.classpath.icedtea.pulseaudio; +import java.io.IOException; + import javax.sound.sampled.AudioSystem; import javax.sound.sampled.LineEvent; import javax.sound.sampled.LineUnavailableException; @@ -63,6 +65,19 @@ private PulseAudioMuteControl muteControl; private PulseAudioVolumeControl volumeControl; + static { + try { + String library = new java.io.File(".").getCanonicalPath() + + java.io.File.separatorChar + + System.mapLibraryName("pulse-java"); + // System.out.println(PulseAudioVolumeControl.class.getCanonicalName() + // + ": " + library); + System.load(library); + } catch (IOException e) { + assert ("Loading failed".endsWith("library")); + } + } + public PulseAudioPort(String name, EventLoop eventLoop) { this.name = name; this.contextPointer = eventLoop.getContextPointer(); @@ -75,7 +90,7 @@ controls.add(muteControl); isOpen = true; - System.out.println("Opened Target Port " + name); + // System.out.println("Opened Target Port " + name); } public abstract byte[] native_setVolume(float newValue);
--- a/src/java/org/classpath/icedtea/pulseaudio/PulseAudioSourcePort.java Fri Sep 12 11:26:43 2008 -0400 +++ b/src/java/org/classpath/icedtea/pulseaudio/PulseAudioSourcePort.java Fri Sep 12 12:44:34 2008 -0400 @@ -37,10 +37,25 @@ package org.classpath.icedtea.pulseaudio; +import java.io.IOException; + import javax.sound.sampled.Port; public class PulseAudioSourcePort extends PulseAudioPort { + static { + try { + String library = new java.io.File(".").getCanonicalPath() + + java.io.File.separatorChar + + System.mapLibraryName("pulse-java"); + // System.out.println(PulseAudioVolumeControl.class.getCanonicalName() + // + ": " + library); + System.load(library); + } catch (IOException e) { + assert ("Loading failed".endsWith("library")); + } + } + public PulseAudioSourcePort(String name, EventLoop eventLoop) { super(name, eventLoop); }
--- a/src/java/org/classpath/icedtea/pulseaudio/PulseAudioTargetPort.java Fri Sep 12 11:26:43 2008 -0400 +++ b/src/java/org/classpath/icedtea/pulseaudio/PulseAudioTargetPort.java Fri Sep 12 12:44:34 2008 -0400 @@ -37,10 +37,25 @@ package org.classpath.icedtea.pulseaudio; +import java.io.IOException; + import javax.sound.sampled.Port; public class PulseAudioTargetPort extends PulseAudioPort { + static { + try { + String library = new java.io.File(".").getCanonicalPath() + + java.io.File.separatorChar + + System.mapLibraryName("pulse-java"); + // System.out.println(PulseAudioVolumeControl.class.getCanonicalName() + // + ": " + library); + System.load(library); + } catch (IOException e) { + assert ("Loading failed".endsWith("library")); + } + } + public PulseAudioTargetPort(String name, EventLoop eventLoop) { super(name, eventLoop); }
--- a/src/java/org/classpath/icedtea/pulseaudio/PulseAudioVolumeControl.java Fri Sep 12 11:26:43 2008 -0400 +++ b/src/java/org/classpath/icedtea/pulseaudio/PulseAudioVolumeControl.java Fri Sep 12 12:44:34 2008 -0400 @@ -66,8 +66,8 @@ String library = new java.io.File(".").getCanonicalPath() + java.io.File.separatorChar + System.mapLibraryName("pulse-java"); - System.out.println(PulseAudioVolumeControl.class.getCanonicalName() - + ": " + library); + // System.out.println(PulseAudioVolumeControl.class.getCanonicalName() + // + ": " + library); System.load(library); } catch (IOException e) { assert ("Loading failed".endsWith("library"));
--- a/src/java/org/classpath/icedtea/pulseaudio/Stream.java Fri Sep 12 11:26:43 2008 -0400 +++ b/src/java/org/classpath/icedtea/pulseaudio/Stream.java Fri Sep 12 12:44:34 2008 -0400 @@ -103,8 +103,8 @@ String library = new java.io.File(".").getCanonicalPath() + java.io.File.separatorChar + System.mapLibraryName("pulse-java"); - System.out - .println(Stream.class.getCanonicalName() + ": " + library); + // System.out + // .println(Stream.class.getCanonicalName() + ": " + library); System.load(library); } catch (IOException e) { assert ("Loading failed".endsWith("library"));
--- a/unittests/org/classpath/icedtea/pulseaudio/PulseAudioMixerTest.java Fri Sep 12 11:26:43 2008 -0400 +++ b/unittests/org/classpath/icedtea/pulseaudio/PulseAudioMixerTest.java Fri Sep 12 12:44:34 2008 -0400 @@ -50,6 +50,7 @@ import javax.sound.sampled.Mixer; import javax.sound.sampled.Port; import javax.sound.sampled.TargetDataLine; +import javax.sound.sampled.DataLine.Info; import junit.framework.JUnit4TestAdapter; @@ -152,11 +153,11 @@ Line.Info allLineInfo[] = selectedMixer.getSourceLineInfo(); Assert.assertNotNull(allLineInfo); Assert.assertTrue(allLineInfo.length > 0); - + boolean foundSourceDataLine = false; boolean foundClip = false; boolean foundPort = false; - + int j = 0; for (Line.Info lineInfo : allLineInfo) { System.out.println("Source Line " + j++ + ": " @@ -178,53 +179,38 @@ Assert.assertTrue("Couldnt find a SourceDataLine", foundSourceDataLine); Assert.assertTrue("Couldnt find a Clip", foundClip); Assert.assertTrue("Couldnt find a Port", foundPort); - + } @Test public void testTargetLinesExist() throws LineUnavailableException { + System.out.println("This tests if target Lines exist"); selectedMixer.open(); Line.Info allLineInfo[] = selectedMixer.getTargetLineInfo(); Assert.assertNotNull(allLineInfo); Assert.assertTrue(allLineInfo.length > 0); + + boolean foundTargetDataLine = false; + boolean foundPort = false; + int j = 0; for (Line.Info lineInfo : allLineInfo) { System.out.println("Target Line " + j++ + ": " + lineInfo.getLineClass()); + if (lineInfo.getLineClass().toString().contains("TargetDataLine")) { + foundTargetDataLine = true; + } else if (lineInfo.getLineClass().toString().contains("Port")) { + foundPort = true; + } else { + Assert.assertTrue("Found invalid type of target line", true); + } Line targetLine = (Line) selectedMixer.getLine(lineInfo); assertNotNull(targetLine); } - } - - @Test - public void testGetTargetPortInfo() throws LineUnavailableException { - selectedMixer.open(); - Line.Info[] lineInfos = selectedMixer.getTargetLineInfo(); - int i = 0; - for (Line.Info info : lineInfos) { - if (info instanceof Port.Info) { - Port.Info portInfo = (Port.Info) info; - System.out.println("Port " + ++i + ": " + portInfo.getName() - + " - " + portInfo.getLineClass()); - } - } - - } - - @Test - public void testGetSourcePortInfo() throws LineUnavailableException { - selectedMixer.open(); - Line.Info[] lineInfos = selectedMixer.getSourceLineInfo(); - int i = 0; - for (Line.Info info : lineInfos) { - if (info instanceof Port.Info) { - Port.Info portInfo = (Port.Info) info; - System.out.println("Port " + ++i + ": " + portInfo.getName() - + " - " + portInfo.getLineClass()); - } - } + Assert.assertTrue("Couldnt find a TargetDataLine", foundTargetDataLine); + Assert.assertTrue("Couldnt find a target Port", foundPort); } @@ -270,6 +256,73 @@ selectedMixer.getLine(Port.Info.MICROPHONE); } + @Test + public void testSaneNumberOfPorts() throws LineUnavailableException { + System.out + .println("This test checks that a sane number of ports are detected"); + selectedMixer.open(); + Line.Info[] lineInfos = selectedMixer.getSourceLineInfo(); + Assert.assertNotNull(lineInfos); + + int ports = 0; + for (Line.Info info : lineInfos) { + if (info instanceof Port.Info) { + ports++; + } + } + Assert.assertTrue("Too few Source ports", ports > 0); + Assert.assertTrue("Too many Source ports... this looks wrong", + ports < 5); + + lineInfos = selectedMixer.getTargetLineInfo(); + ports = 0; + for (Line.Info info : lineInfos) { + if (info instanceof Port.Info) { + ports++; + } + } + Assert.assertTrue("Too few Target ports", ports > 0); + Assert.assertTrue("Too many Target ports... this looks wrong", + ports < 5); + + } + + @Test + public void testGetTargetPortInfo() throws LineUnavailableException { + System.out.println("This test checks target ports"); + selectedMixer.open(); + Line.Info[] lineInfos = selectedMixer.getTargetLineInfo(); + int i = 0; + for (Line.Info info : lineInfos) { + if (info instanceof Port.Info) { + Port.Info portInfo = (Port.Info) info; + Assert.assertTrue(portInfo.isSource() == false); + Assert.assertTrue(portInfo.getLineClass() == Port.class); + System.out.println("Port " + ++i + ": " + portInfo.getName() + + " - " + portInfo.getLineClass()); + } + } + + } + + @Test + public void testGetSourcePortInfo() throws LineUnavailableException { + System.out.println("This test checks source ports"); + selectedMixer.open(); + Line.Info[] lineInfos = selectedMixer.getSourceLineInfo(); + int i = 0; + for (Line.Info info : lineInfos) { + if (info instanceof Port.Info) { + Port.Info portInfo = (Port.Info) info; + Assert.assertTrue(portInfo.isSource() == true); + Assert.assertTrue(portInfo.getLineClass() == Port.class); + System.out.println("Port " + ++i + ": " + portInfo.getName() + + " - " + portInfo.getLineClass()); + } + } + + } + @Test(expected = IllegalStateException.class) public void testOpeningAgain() throws LineUnavailableException { selectedMixer.open();