From 3bf564210e7dca2f5d6b47898c554f5762ac5282 Mon Sep 17 00:00:00 2001
From: Xerxes Rånby <xerxes@zafena.se>
Date: Wed, 19 Jun 2013 18:52:38 +0200
Subject: FFMPEGMediaPlayer: Add AudioSink interface.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Use ALAudioSink when available and fallback to
JavaSoundAudioSink when JOAL are not found on classpath.

Java Sound playback moved from FFMPEGMediaPlayer into JavaSoundAudioSink.

Signed-off-by: Xerxes Rånby <xerxes@zafena.se>
---
 src/jogl/classes/jogamp/opengl/util/av/AudioSink.java | 11 +++++++++++
 1 file changed, 11 insertions(+)
 create mode 100644 src/jogl/classes/jogamp/opengl/util/av/AudioSink.java

(limited to 'src/jogl/classes/jogamp/opengl/util/av/AudioSink.java')

diff --git a/src/jogl/classes/jogamp/opengl/util/av/AudioSink.java b/src/jogl/classes/jogamp/opengl/util/av/AudioSink.java
new file mode 100644
index 000000000..fedead713
--- /dev/null
+++ b/src/jogl/classes/jogamp/opengl/util/av/AudioSink.java
@@ -0,0 +1,11 @@
+package jogamp.opengl.util.av;
+
+public interface AudioSink {
+
+    int getDataAvailable();
+
+    boolean isDataAvailable(int data_size);
+
+    void writeData(byte[] sampleData, int data_size);
+    
+}
-- 
cgit v1.2.3


From 6509c313dec8947723a932e7d1646a78dd6ac49a Mon Sep 17 00:00:00 2001
From: Xerxes Rånby <xerxes@zafena.se>
Date: Mon, 24 Jun 2013 19:39:56 +0200
Subject: AudioSink: interface add isAudioSinkAvailable
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Xerxes Rånby <xerxes@zafena.se>
---
 src/jogl/classes/jogamp/opengl/openal/av/ALAudioSink.java        | 3 ++-
 src/jogl/classes/jogamp/opengl/util/av/AudioSink.java            | 2 ++
 src/jogl/classes/jogamp/opengl/util/av/JavaSoundAudioSink.java   | 3 ++-
 src/jogl/classes/jogamp/opengl/util/av/NullAudioSink.java        | 5 +++++
 .../classes/jogamp/opengl/util/av/impl/FFMPEGMediaPlayer.java    | 9 +++++----
 5 files changed, 16 insertions(+), 6 deletions(-)

(limited to 'src/jogl/classes/jogamp/opengl/util/av/AudioSink.java')

diff --git a/src/jogl/classes/jogamp/opengl/openal/av/ALAudioSink.java b/src/jogl/classes/jogamp/opengl/openal/av/ALAudioSink.java
index db01d3a38..c8004d6b3 100644
--- a/src/jogl/classes/jogamp/opengl/openal/av/ALAudioSink.java
+++ b/src/jogl/classes/jogamp/opengl/openal/av/ALAudioSink.java
@@ -161,7 +161,8 @@ public class ALAudioSink implements AudioSink {
         return (NUM_BUFFERS-val[0])*4096;
     }
 
-    public static boolean isAvailable() {
+    @Override
+    public boolean isAudioSinkAvailable() {
         return available;
     }
 }
diff --git a/src/jogl/classes/jogamp/opengl/util/av/AudioSink.java b/src/jogl/classes/jogamp/opengl/util/av/AudioSink.java
index fedead713..504e4b2db 100644
--- a/src/jogl/classes/jogamp/opengl/util/av/AudioSink.java
+++ b/src/jogl/classes/jogamp/opengl/util/av/AudioSink.java
@@ -2,6 +2,8 @@ package jogamp.opengl.util.av;
 
 public interface AudioSink {
 
+    boolean isAudioSinkAvailable();
+    
     int getDataAvailable();
 
     boolean isDataAvailable(int data_size);
diff --git a/src/jogl/classes/jogamp/opengl/util/av/JavaSoundAudioSink.java b/src/jogl/classes/jogamp/opengl/util/av/JavaSoundAudioSink.java
index 0e2806322..653a02111 100644
--- a/src/jogl/classes/jogamp/opengl/util/av/JavaSoundAudioSink.java
+++ b/src/jogl/classes/jogamp/opengl/util/av/JavaSoundAudioSink.java
@@ -71,7 +71,8 @@ public class JavaSoundAudioSink implements AudioSink {
         return auline.available()>=data_size;
     }
 
-    public static boolean isAvailable() {
+    @Override
+    public boolean isAudioSinkAvailable() {
         return available;
     }
 
diff --git a/src/jogl/classes/jogamp/opengl/util/av/NullAudioSink.java b/src/jogl/classes/jogamp/opengl/util/av/NullAudioSink.java
index 81259f4c5..d92967849 100644
--- a/src/jogl/classes/jogamp/opengl/util/av/NullAudioSink.java
+++ b/src/jogl/classes/jogamp/opengl/util/av/NullAudioSink.java
@@ -15,4 +15,9 @@ public class NullAudioSink implements AudioSink {
     @Override
     public void writeData(byte[] sampleData, int data_size) {
     }
+
+    @Override
+    public boolean isAudioSinkAvailable() {
+        return true;
+    }
 }
diff --git a/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGMediaPlayer.java b/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGMediaPlayer.java
index 9ae1541f9..9c0c9bd94 100644
--- a/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGMediaPlayer.java
+++ b/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGMediaPlayer.java
@@ -130,11 +130,12 @@ public class FFMPEGMediaPlayer extends EGLMediaPlayerImpl {
             System.err.println("LIB_AV Codec : "+avCodecVersion);
             initIDs0();            
             available = true;
-            audioSink = new NullAudioSink();
-            if(ALAudioSink.isAvailable()) {
-                audioSink = new ALAudioSink();
-            } else if(JavaSoundAudioSink.isAvailable()) {
+            audioSink = new ALAudioSink();
+            if(!audioSink.isAudioSinkAvailable()) {
                 audioSink = new JavaSoundAudioSink();
+                if(!audioSink.isAudioSinkAvailable()) {
+                    audioSink = new NullAudioSink();
+                }
             }
             maxAvailableAudio = audioSink.getDataAvailable();
 
-- 
cgit v1.2.3