Sync bindings/java with jvlc head (release is close ;).
authorFilippo Carone <littlejohn@videolan.org>
Wed, 26 Jul 2006 14:15:08 +0000 (14:15 +0000)
committerFilippo Carone <littlejohn@videolan.org>
Wed, 26 Jul 2006 14:15:08 +0000 (14:15 +0000)
14 files changed:
Makefile.am
VLCExample.java
VlcClient.java
org/videolan/jvlc/AudioIntf.java
org/videolan/jvlc/InputIntf.java
org/videolan/jvlc/JLibVLC.java
org/videolan/jvlc/JVLC.java
org/videolan/jvlc/Playlist.java
org/videolan/jvlc/PlaylistIntf.java
org/videolan/jvlc/VLCException.java [new file with mode: 0644]
org/videolan/jvlc/VLMIntf.java
org/videolan/jvlc/VideoIntf.java
vlc-graphics-jni.cc
vlc-libvlc-jni.cc

index 6b8f518..ad4ff76 100644 (file)
@@ -4,16 +4,15 @@
 
 if BUILD_JAVA
 
-OBJECTS = org/videolan/jvlc/Playlist.class org/videolan/jvlc/AudioIntf.class org/videolan/jvlc/InputIntf.class org/videolan/jvlc/PlaylistIntf.class org/videolan/jvlc/VideoIntf.class org/videolan/jvlc/JLibVLC.class org/videolan/jvlc/JVLC.class org/videolan/jvlc/JVLCCanvas.class org/videolan/jvlc/JVLCPanel.class org/videolan/jvlc/VLMIntf.class org/videolan/jvlc/GenericVideoWidget.class
+OBJECTS = org/videolan/jvlc/VLCException.class org/videolan/jvlc/Playlist.class org/videolan/jvlc/AudioIntf.class org/videolan/jvlc/InputIntf.class org/videolan/jvlc/PlaylistIntf.class org/videolan/jvlc/VideoIntf.class org/videolan/jvlc/JLibVLC.class org/videolan/jvlc/JVLC.class org/videolan/jvlc/JVLCCanvas.class org/videolan/jvlc/JVLCPanel.class org/videolan/jvlc/VLMIntf.class org/videolan/jvlc/GenericVideoWidget.class
 
 # Include some JAVA stuff
 PROCESSOR_FAMILY = `uname -m | sed -e 's/^i.86/i386/' | sed -e 's/^x86_64/amd64/'`
 if HAVE_WIN32
 JINCLUDES = -I${JAVA_HOME}/include -I${JAVA_HOME}/include/win32
 LIBJINCLUDES = -L${JAVA_HOME}/lib -ljawt
-JCC = javac
+JAVAC = javac
 JCH = javah
-JCC_FLAGS = 
 #CXX = g++ -Wall -mno-cygwin -g
 #LDFLAGS = -mno-cygwin `vlc-config --libs external pic` -Wl,--kill-at
 JAVACXXFLAGS = `top_builddir=../.. ../../vlc-config --cflags pic` -I../../ -I ../../include $(JINCLUDES)
@@ -21,11 +20,10 @@ JAVALDFLAGS = -mno-cygwin -L../../src -lvlc `top_builddir=../.. ../../vlc-config
 else
 JINCLUDES = -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/linux
 LIBJINCLUDES = -L$(JAVA_HOME)/jre/lib/$(PROCESSOR_FAMILY) -ljawt
-JCC = gcj -g
+JAVAC = gcj -Wall -g -C 
 JCH = gcjh -jni
 SWT_PATH = /usr/share/java
 # Compile flags
-JCC_FLAGS = -C
 JAVACXXFLAGS = `top_builddir=../.. ../../vlc-config --cflags pic` -I../../ -I ../../include $(JINCLUDES)
 JAVALDFLAGS = -L../../src -lvlc `top_builddir=../.. ../../vlc-config --libs builtin vlc pic`
 endif
@@ -48,22 +46,22 @@ vlc-libvlc-jni.o: VlcClient
        $(CXX) -c vlc-libvlc-jni.cc $(CXXFLAGS) $(JAVACXXFLAGS)
 
 VlcClient: $(OBJECTS)
-       $(JCC) $(JCC_FLAGS) VlcClient.java
+       $(JAVAC) VlcClient.java
 
 VLCExample: $(OBJECTS)
-       $(JCC) $(JCC_FLAGS) VLCExample.java
+       $(JAVAC) VLCExample.java
 
 if HAVE_WIN32
 %.class: %.java
-       $(JCC) $(JCC_FLAGS) $?
+       $(JAVAC)  $?
        $(JCH) org.videolan.jvlc.$(*F)
 else
 %.class: %.java
-       $(JCC) $(JCC_FLAGS) $?
+       $(JAVAC) $?
        $(JCH) org/videolan/jvlc/$(*F)
 endif
 
 clean:
        rm -f *.class *~ org/videolan/jvlc/*.class org_videolan*.h *.so *.o *.dll
 
-endif
\ No newline at end of file
+endif
index 8b4a8ba..9733229 100644 (file)
@@ -1,4 +1,5 @@
 import org.videolan.jvlc.JVLC;
+import org.videolan.jvlc.VLCException;
 
 
 public class VLCExample 
@@ -7,27 +8,36 @@ public class VLCExample
     public static void main( String[] args )
     {
        boolean videoInput = false;
-        JVLC jvlc = new JVLC();
-
+        JVLC jvlc = new JVLC(args);
+        try {
         jvlc.playlist.add("file://" + System.getProperty( "user.dir" ) + "/a.avi", "a.avi");
        jvlc.playlist.add("file://" + System.getProperty( "user.dir" ) + "/a.mp3", "a.mp3");
         jvlc.playlist.play( -1 , null );
-        
+        } catch (VLCException e) {
+               e.printStackTrace();
+        }
         while (! jvlc.isInputPlaying()) ;
+       while (! jvlc.hasVout() );        
         
-        // testing vout functionalities
+       
+       
+       // testing vout functionalities
 
         try {
-               Thread.sleep(500);
+               Thread.sleep(2500);
                if (jvlc.hasVout()) videoInput = true;
                } catch (InterruptedException e) {
                                e.printStackTrace();
                }
 
         if (videoInput) {
-               System.out.print(jvlc.getVideoWidth());
-               System.out.print("x");
-               System.out.println(jvlc.getVideoHeight());
+               try {
+                       System.out.print(jvlc.getVideoWidth());
+                       System.out.print("x");
+                       System.out.println(jvlc.getVideoHeight());
+               } catch (VLCException e) {
+                       e.printStackTrace();
+               }
         }
         try 
         {
@@ -71,7 +81,11 @@ public class VLCExample
         
        System.out.println("Everything fine ;)");
        System.out.println("Playing next item");
-       jvlc.playlist.next();
+       try {
+               jvlc.playlist.next();
+       } catch (VLCException e) {
+               e.printStackTrace();
+       }
        
        try {
                Thread.sleep(3000);
index 452087e..9634c5e 100644 (file)
@@ -1,9 +1,35 @@
+/*****************************************************************************
+ * VlcClient.java: Sample Swing player
+ *****************************************************************************
+ * Copyright (C) 1998-2006 the VideoLAN team
+ * 
+ * Created on 28-feb-2006
+ *
+ * $Id: AudioIntf.java 8 2006-02-28 12:03:47Z little $
+ *
+ * This program is free software; you can redistribute it
+ * and/or modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+ * 
+ */
+
 import java.awt.Frame;
 import java.awt.event.WindowAdapter;
 import java.awt.event.WindowEvent;
 
 import org.videolan.jvlc.JVLCPanel;
 import org.videolan.jvlc.JVLC;
+import org.videolan.jvlc.VLCException;
 
 class VLCPlayerFrame  extends Frame {
     public VLCPlayerFrame() {
@@ -109,15 +135,20 @@ class VLCPlayerFrame  extends Frame {
     private void pauseButtonActionPerformed(java.awt.event.ActionEvent evt) {
         try {
             //System.out.println(mci.getMediaPosition(PositionOrigin.ABSOLUTE, PositionKey.BYTECOUNT));
-           jvlc.playlist.pause();
+           jvlc.playlist.togglePause();
         } catch (Exception e) {
             e.printStackTrace();
        }
     }
 
     private void setButtonActionPerformed(java.awt.event.ActionEvent evt) {
-        jvlc.playlist.add("file:///home/little/a.avi", "a.avi");
-        jvlc.playlist.play(-1, null);
+        try {
+                       jvlc.playlist.add("file:///home/little/a.avi", "a.avi");
+                       jvlc.playlist.play(-1, null);
+               } catch (VLCException e) {
+                       // TODO Auto-generated catch block
+                       e.printStackTrace();
+               }
     }
 
     private void fullScreenButtonActionPerformed(java.awt.event.ActionEvent evt) {
index 4385388..6d65606 100644 (file)
 package org.videolan.jvlc;
 
 public interface AudioIntf {
-    boolean getMute();
-    void setMute(boolean value);
-    void toggleMute();
-    int getVolume();
-    void setVolume(int volume);
+    /**
+     * @return True if input is currently muted.
+     * @throws VLCException
+     */
+    boolean getMute() throws VLCException;
+    
+    /**
+     * @param value If true, then the input is muted.
+     * @throws VLCException
+     */
+    void setMute(boolean value) throws VLCException;
+
+    /**
+     * Toggles mute
+     * @throws VLCException
+     */
+    void toggleMute() throws VLCException;
+
+    /**
+     * @return The volume level
+     * @throws VLCException
+     */
+    int getVolume() throws VLCException;
+
+    /**
+     * @param volume The volume level (0-200) to set.
+     * @throws VLCException
+     */
+    void setVolume(int volume) throws VLCException;
 }
index 93cb65e..5be1747 100644 (file)
 
 package org.videolan.jvlc;
 
+/**
+ * @author little
+ *
+ */
 public interface InputIntf {
     
     /**
-     * This function returns the total length of the current file playing
-     * in millis.
+     * @return The total length of the current file playing in millis.
+     * @throws VLCException
      */
-    long getInputLength();
+    long getInputLength() throws VLCException;
 
     /**
-     * This function returns the current position in millis within the
-     * currently playing playlist item.
+     * @return The current position in millis within the playing item.
+     * @throws VLCException
+     */
+    long getInputTime() throws VLCException;
+    
+    /**
+     * @return The position in %.
+     * @throws VLCException
+     */
+    float getInputPosition() throws VLCException;
+    
+    /**
+     * Not implemented
+     * @throws VLCException
+     */
+    void setInputTime() throws VLCException;
+    
+    
+    /**
+     * @return If the playing item is a video file, returns the FPS, otherwise 0.
+     * @throws VLCException
      */
-    long getInputTime();
-    float getInputPosition();
-    void setInputTime();
-    double getInputFPS();
+    double getInputFPS() throws VLCException;
     
 }
index 3d2e642..00f8137 100644 (file)
@@ -28,4 +28,4 @@
 
 package org.videolan.jvlc;
 
-public interface JLibVLC extends AudioIntf, VideoIntf, InputIntf { }
+public interface JLibVLC extends AudioIntf, VideoIntf, InputIntf, VLMIntf { }
index 37d125f..294994c 100644 (file)
@@ -5,7 +5,8 @@
  * Copyright (C) 1998-2006 the VideoLAN team
  * 
  * Author: Filippo Carone <filippo@carone.org>
- * 
+ *         Philippe Morin <phmorin@free.fr>
+ *
  * Created on 28-feb-2006
  *
  * $Id$
 
 package org.videolan.jvlc;
 
-/**
- * @author little
- *
- */
 public class JVLC implements JLibVLC, Runnable {
     
     static {
-        System.load(System.getProperty( "user.dir" ) + "/libjvlc.so" );
+        System.loadLibrary("jvlc" );
     }
 
     /**
@@ -47,12 +44,20 @@ public class JVLC implements JLibVLC, Runnable {
 
     
     private boolean beingDestroyed = false;
+
+    /**
+     * This is the time in millis VLC checks for internal status 
+     */
     private long resolution = 50;
+    
        private boolean inputPlaying = false;
        private boolean inputVout = false;
     
     public JVLC() {
-        _instance = createInstance();
+        String[] args = new String[1];
+        args[0] = "";
+        
+        _instance = createInstance(args);
         playlist = new Playlist( _instance );
         new Thread(this).start();
     }
@@ -108,90 +113,139 @@ public class JVLC implements JLibVLC, Runnable {
     private native int      _getVideoWidth();
     private native void                _getSnapshot(String filename);
  
+
+    /*
+     * VLM native methods
+     */
+    private native void _addBroadcast(String mediaName, String meditInputMRL, String mediaOutputMRL ,
+                               String[] additionalOptions, boolean enableBroadcast, boolean isPlayableInLoop);
+    private native void _deleteMedia   (String mediaName);
+    private native void _setEnabled            (String mediaName,      boolean newStatus);
+    private native void _setOutput             (String mediaName,      String mediaOutputMRL);
+    private native void _setInput              (String mediaName,      String mediaInputMRL);
+    private native void _setLoop               (String mediaName,      boolean isPlayableInLoop);
+    private native void _changeMedia   (String newMediaName, String inputMRL, String outputMRL , String[] additionalOptions, boolean enableNewBroadcast, boolean isPlayableInLoop);
+
+    /*
+     * Native methods wrappers
+     */
+       
     
-    public boolean getMute() {
+    public boolean getMute() throws VLCException {
         return _getMute();
     }
 
-    public void setMute(boolean value) {
+    public void setMute(boolean value) throws VLCException {
         _setMute( value );
         
     }
     
-    public void toggleMute() {
+    public void toggleMute() throws VLCException {
        _toggleMute();
     }
 
-    public int getVolume() {
+    public int getVolume() throws VLCException {
         return _getVolume();        
     }
 
-    public void setVolume(int volume) {
+    public void setVolume(int volume) throws VLCException {
         _setVolume( volume );
         
     }
 
-    public void toggleFullscreen() {
+    public void toggleFullscreen() throws VLCException {
         _toggleFullscreen();
         
     }
 
-    public void setFullscreen( boolean value ) {
+    public void setFullscreen( boolean value ) throws VLCException {
         _setFullscreen( value );
         
     }
 
-    public boolean getFullscreen() {
+    public boolean getFullscreen() throws VLCException {
        return _getFullscreen();        
     }
 
-    public int getVideoHeight() {
+    public int getVideoHeight() throws VLCException {
         return _getVideoHeight();
     }
     
 
-    public int getVideoWidth() {
+    public int getVideoWidth() throws VLCException {
         return _getVideoWidth();        
     }
 
     
-    public long getInputLength() {
+    public long getInputLength() throws VLCException {
         return _getInputLength();        
     }
 
-    public long getInputTime() {
+    public long getInputTime() throws VLCException {
         return _getInputTime();
     }
 
-    public float getInputPosition() {
+    public float getInputPosition() throws VLCException {
         return _getInputPosition();
         
     }
 
-    public void setInputTime() {
+    public void setInputTime() throws VLCException {
         // TODO Auto-generated method stub
         
     }
 
-    public double getInputFPS() {
+    public double getInputFPS() throws VLCException {
         return _getInputFPS();
     }
     
-    public long getInstance() {
+    public long getInstance() throws VLCException {
         return _instance;
     }
 
     /*
      * Getters and setters
      */
-       public Playlist getPlaylist() {
+       public Playlist getPlaylist() throws VLCException {
                return playlist;
        }
     
 
-       public void getSnapshot(String filename) {
+       public void getSnapshot(String filename) throws VLCException {
                _getSnapshot(filename);
        }
+
+
+    public void addBroadcast( String name, String input, String output, String[] options, boolean enabled, boolean loop )
+       throws VLCException {
+       _addBroadcast(name, input, output, options, enabled, loop);
+    }
+    
+    public void deleteMedia( String name ) throws VLCException {
+       _deleteMedia(name);
+    }
+    
+    public void setEnabled( String name, boolean enabled ) throws VLCException {
+       _setEnabled(name, enabled);
+    }
+    
+    public void setOutput( String name, String output ) throws VLCException {
+       _setOutput(name, output);
+    }
+    
+    public void setInput( String name, String input ) throws VLCException {
+       _setInput(name, input);
+    }
+    
+    public void setLoop( String name, boolean loop ) throws VLCException {
+       _setLoop(name, loop);
+    }
+    
+    public void changeMedia( String name, String input, String output, String[] options, boolean enabled, boolean loop )
+       throws VLCException {
+       _changeMedia(name, input, output, options, enabled, loop);
+    }
+
        
        /**
         * Checks if the input is playing.
@@ -217,26 +271,28 @@ public class JVLC implements JLibVLC, Runnable {
         */
        public void run() {
                while (! beingDestroyed) {
-                       while (playlist.isRunning()) {
-                               if (playlist.inputIsPlaying()) {
-                                       inputPlaying = true;
+                       try {
+                               while (playlist.isRunning()) {
+                                       if (playlist.inputIsPlaying()) {
+                                               inputPlaying = true;
+                                       }
+                                       else {
+                                               inputPlaying = false;
+                                   }
+                                           
+                                       if (playlist.inputHasVout()) {
+                                               inputVout = true;
+                                   }
+                                       else {
+                                               inputVout = false;
+                                   }
+                                       try {
+                                               Thread.sleep(resolution);
+                                       } catch (InterruptedException e) {
+                                               e.printStackTrace();
+                                       } 
                                }
-                               else {
-                                       inputPlaying = false;
-                }
-                           
-                               if (playlist.inputHasVout()) {
-                                       inputVout = true;
-                }
-                               else {
-                                       inputVout = false;
-                }
-                               try {
-                                       Thread.sleep(resolution);
-                               } catch (InterruptedException e) {
-                                       e.printStackTrace();
-                               } 
-                       } // while playlist running
+                       } catch (VLCException e1) { } // while playlist running
                   inputPlaying = false;
                   inputVout = false;
                        try {
index 5e63e41..e59f17a 100644 (file)
@@ -54,71 +54,71 @@ public class Playlist implements PlaylistIntf {
        native private boolean _inputHasVout();
 
 
-    public synchronized void play(int id, String[] options) {
+    public synchronized void play(int id, String[] options) throws VLCException {
         _play(id, options);
     }
 
-    public synchronized void play() {
+    public synchronized void play() throws VLCException {
         play(-1, null);
     }
 
-    public synchronized void pause() {
+    public synchronized void togglePause() throws VLCException {
         _pause();
     }
 
-    public synchronized void stop() {
+    public synchronized void stop() throws VLCException {
         _stop();
 
     }
 
-    public boolean isRunning() {
+    public boolean isRunning() throws VLCException {
          return (_isRunning() == 0)? false : true ;
     }
 
-    public synchronized int itemsCount() {
+    public synchronized int itemsCount() throws VLCException {
         return _itemsCount();
     }
 
-    public synchronized void next() {
+    public synchronized void next() throws VLCException {
         if (! isRunning())
             play();
         _next();
     }
 
-    public synchronized void prev() {
+    public synchronized void prev() throws VLCException {
         if (! isRunning())
             play();
         _prev();
     }
 
-    public synchronized void clear() {
+    public synchronized void clear() throws VLCException {
        _clear();
     }
 
-    public synchronized int add(String uri, String name, String[] options) {
+    public synchronized int add(String uri, String name, String[] options) throws VLCException {
         return _playlist_add(uri, name, options);
     }
     
-    public synchronized int add(String uri, String name) {
+    public synchronized int add(String uri, String name) throws VLCException {
         return add(uri, name, null);
     }
 
     public synchronized void addExtended() {
     }
 
-    public synchronized void deleteItem(int itemID) {
+    public synchronized void deleteItem(int itemID) throws VLCException {
         _deleteItem(itemID);
     }
     
-    public long getInstance() {
+    public long getInstance() throws VLCException {
         return libvlcInstance;
     }
     
-    public synchronized boolean inputIsPlaying() {
+    public synchronized boolean inputIsPlaying() throws VLCException {
         return _inputIsPlaying();
     }
 
-    public synchronized boolean inputHasVout() {
+    public synchronized boolean inputHasVout() throws VLCException {
         return _inputHasVout();
     }
     
index 3219f90..9bb7141 100644 (file)
 package org.videolan.jvlc;
 
 public interface PlaylistIntf {
-    void play(int id, String[] options);
-    void pause();
-    void stop();
-    boolean isRunning();
-    int itemsCount();
-    boolean inputIsPlaying();
-    void next();
-    void prev();
-    void clear();
-    int add(String uri, String name);
+    /**
+     * @param id The ID to play
+     * @param options Options to play the item withs
+     */
+    void play(int id, String[] options) throws VLCException;
+    
+    /**
+     * Plays the current item
+     */
+    void play() throws VLCException;
+    
+    /**
+     * Toggles pause for the current item.
+     */
+    void togglePause() throws VLCException;
+    
+    /**
+     * Stops the playlist.
+     */
+    void stop() throws VLCException;
+    
+    /**
+     * @return True if playlist is not stopped
+     */
+    boolean isRunning() throws VLCException;
+    
+    /**
+     * @return Current number of items in the playlist
+     */
+    int itemsCount() throws VLCException;
+    
+    /**
+     * @return True if the current input is really playing
+     */
+    boolean inputIsPlaying() throws VLCException;
+    
+    /**
+     * Move to next item
+     */
+    void next() throws VLCException;
+    
+    /**
+     * Move to previous item
+     */
+    void prev() throws VLCException;
+    
+    /**
+     * Clear the playlist
+     */
+    void clear() throws VLCException;
+    
+    /**
+     * Add a new item in the playlist
+     * @param uri Location of the item
+     * @param name Name of the item
+     * @return The item ID
+     */
+    int add(String uri, String name) throws VLCException;
+    
+    /**
+     * Currently not implemented
+     */
     void addExtended();
-    boolean inputHasVout();
-
-
+    
+    /**
+     * @return True if the current input has spawned a video output window
+     */
+    boolean inputHasVout() throws VLCException;
 }
diff --git a/org/videolan/jvlc/VLCException.java b/org/videolan/jvlc/VLCException.java
new file mode 100644 (file)
index 0000000..e239e98
--- /dev/null
@@ -0,0 +1,46 @@
+/*****************************************************************************
+ * JVLC.java: Main Java Class, represents a libvlc_instance_t object
+ *****************************************************************************
+ *
+ * Copyright (C) 1998-2006 the VideoLAN team
+ * 
+ * Author: Philippe Morin <phmorin@free.fr>
+ *
+ * Created on 18-jul-2006
+ *
+ * $Id $
+ *
+ * This program is free software; you can redistribute it
+ * and/or modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ * 
+ */
+
+package org.videolan.jvlc;
+
+import java.lang.Exception;
+
+public class VLCException extends Exception {
+       public VLCException() {
+          super();
+       }
+       public VLCException(String message) {
+          super(message);
+       }
+       public VLCException(String message,Throwable cause) {
+          super(message,cause);
+       }
+       public VLCException(Throwable cause) {
+          super(cause);
+       }
+}
index ece411b..4fc41d2 100644 (file)
 package org.videolan.jvlc;
 
 public interface VLMIntf {
-    void addBroadcast( String name, String input, String output, String[] options, boolean enabled, boolean loop );
-    void deleteMedia( String name );
-    void setEnabled( String name, boolean enabled );
-    void setOutput( String name, String output );
-    void setInput( String name, String input );
-    void setLoop( String name, boolean loop );
-    void changeMedia( String name, String input, String output, String[] options, boolean enabled, boolean loop );
+
+       /**
+        * Add a broadcast, with one input
+        * @param mediaName the name of the new broadcast
+        * @param medInputMRL the input MRL
+        * @param mediaOutputURL the output MRL (the parameter to the "sout" variable)
+        * @param additionalOptions additional options
+        * @param enableBroadcast boolean for enabling the new broadcast
+        * @param isPlayableInLoop Should this broadcast be played in loop ?
+        */
+    void addBroadcast( String name, String input, String output, String[] options, boolean enabled, boolean loop )
+       throws VLCException;
+    
+    /**
+     * Delete a media (vod or broadcast)
+     * @param name the media to delete
+     */    
+    void deleteMedia( String name ) throws VLCException;
+    
+    /**
+     * Enable or disable a media (vod or broadcast)
+     * @param name the media to work on
+     * @param enabled the new status
+     */    
+    void setEnabled( String name, boolean enabled ) throws VLCException;
+    
+    /**
+     * Set the output for a media
+     * @param name the media to work on
+     * @param output the output MRL (the parameter to the "sout" variable)
+     */
+    void setOutput( String name, String output ) throws VLCException;
+    
+    /**
+     * Set a media's input MRL. This will delete all existing inputs and
+     * add the specified one.
+     * @param name the media to work on
+     * @param input the input MRL
+     */
+    void setInput( String name, String input ) throws VLCException;
+    
+    /**
+     * Set output for a media
+     * @param name the media to work on
+     * @param loop the new status
+     */
+    void setLoop( String name, boolean loop ) throws VLCException;
     
+    /**
+     * Edit the parameters of a media. This will delete all existing inputs and
+     * add the specified one.
+     * @param name the name of the new broadcast
+     * @param input the input MRL
+     * @param output the output MRL (the parameter to the "sout" variable)
+     * @param options additional options
+     * @param enabled boolean for enabling the new broadcast
+     * @param loop Should this broadcast be played in loop ?
+     */    
+    void changeMedia( String name, String input, String output, String[] options, boolean enabled, boolean loop )
+       throws VLCException;
 }
index 8c65610..2b7c569 100644 (file)
 
 package org.videolan.jvlc;
 
-/**
- * @author little
- *
- */
-/**
- * @author little
- *
- */
+
 public interface VideoIntf {
     /**
      * Toggles the fullscreen.
      */
-    void       toggleFullscreen();
+    void       toggleFullscreen() throws VLCException;
     
     
     /**
      * Sets fullscreen if fullscreen argument is true. 
      * @param fullscreen
      */
-    void       setFullscreen( boolean fullscreen );
+    void       setFullscreen( boolean fullscreen ) throws VLCException;
     
     
     /**
      * @return True if the current video window is in fullscreen mode.
      */
-    boolean getFullscreen();
+    boolean getFullscreen() throws VLCException;
     
     
     /**
@@ -63,16 +56,16 @@ public interface VideoIntf {
      * If you only give a path, not including the filename, the snapshot will be saved in
      * the specified path using vlc naming conventions. 
      */
-    void       getSnapshot(String filepath);
+    void       getSnapshot(String filepath) throws VLCException;
     
     
     /**
      * @return The current video window height
      */
-    int                getVideoHeight();
+    int                getVideoHeight() throws VLCException;
 
     /**
      * @return The current video window width
      */
-    int                getVideoWidth();    
+    int                getVideoWidth() throws VLCException;    
 }
index badcc76..0e843f7 100644 (file)
 #include <jawt.h>
 #include <jawt_md.h>
 
-#ifndef WIN32
 #include <X11/Xlib.h> // for Xlibs graphics functions
-#endif
-
 #include <stdio.h>    // for printf
 
 /* JVLC internal imports, generated by gcjh */
@@ -44,16 +41,10 @@ JNIEXPORT void JNICALL Java_org_videolan_jvlc_JVLCCanvas_paint (JNIEnv *env, job
   JAWT awt;
   JAWT_DrawingSurface* ds;
   JAWT_DrawingSurfaceInfo* dsi;
-
-#ifdef WIN32
-  JAWT_Win32DrawingSurfaceInfo* dsi_win;
-#else
   JAWT_X11DrawingSurfaceInfo* dsi_x11;
-  GC gc;
-#endif
 
   jint lock;
-
+  GC gc;
     
   vlc_value_t value;
 
index 505f7ef..58c0cea 100644 (file)
@@ -4,8 +4,9 @@
  * Copyright (C) 1998-2006 the VideoLAN team
  *
  * Authors: Filippo Carone <filippo@carone.org>
+ *          Philippe Morin <phmorin@free.fr>
  *
- * $Id$
+ * $Id: vlc-libvlc-jni.cc 140 2006-07-26 13:47:20Z littlejohn $
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
 jlong getClassInstance (JNIEnv *env, jobject _this);
 jlong getPlaylistInstance (JNIEnv *env, jobject _this);
 
-JNIEXPORT jlong JNICALL Java_org_videolan_jvlc_JVLC_createInstance__ (JNIEnv *env, jobject _this) {
+void handle_vlc_exception( JNIEnv* env, libvlc_exception_t* exception ) {
+  jclass newExcCls;
 
-    // res is the pointer to libvlc_instance_t
-    long res;
-    libvlc_exception_t *exception = ( libvlc_exception_t * ) malloc( sizeof( libvlc_exception_t ));
-    char temp_argv[1][5] = {""};
-
-    libvlc_exception_init( exception );
-
-    res = ( long ) libvlc_new( 0, (char **)temp_argv, exception );
-
-    if ( libvlc_exception_raised( exception )) 
-    {
-        ///\TODO: raise java exception
-        printf("%s\n", libvlc_exception_get_message( exception ));
-    }
-
-    free( exception );
-
-    //libvlc_playlist_lock( ( libvlc_instance_t * ) res, NULL);
-
-    return res;
+  // raise a Java exception
+  newExcCls = env->FindClass("org/videolan/jvlc/VLCException");
+  if (newExcCls == 0) { /* Unable to find the new exception class, give up. */
+      return;
+  }
+  env->ThrowNew(newExcCls, libvlc_exception_get_message(exception));
+       
 }
 
+
 JNIEXPORT jlong JNICALL Java_org_videolan_jvlc_JVLC_createInstance___3Ljava_lang_String_2 (JNIEnv *env, jobject _this, jobjectArray args) {
 
     long res;
@@ -74,7 +64,10 @@ JNIEXPORT jlong JNICALL Java_org_videolan_jvlc_JVLC_createInstance___3Ljava_lang
   
     argc = (int) env->GetArrayLength((jarray) args) + 1;
     argv = (const char **) malloc(argc * sizeof(char*));
-    sprintf( (char *) argv[0], "%s", "jvlc" );
+
+    argv[0] = "vlc";
+    
+    
     for (int i = 0; i < argc - 1; i++) {
         argv[i+1] = env->GetStringUTFChars((jstring) env->GetObjectArrayElement(args, i),
                                          0
@@ -125,8 +118,7 @@ JNIEXPORT jboolean JNICALL Java_org_videolan_jvlc_JVLC__1getMute (JNIEnv *env, j
     
     if ( libvlc_exception_raised( exception )) 
     {
-        ///\TODO: raise java exception
-        printf("%s\n", libvlc_exception_get_message( exception ));
+        handle_vlc_exception( env, exception );
     }
 
     free( exception );
@@ -149,8 +141,7 @@ JNIEXPORT void JNICALL Java_org_videolan_jvlc_JVLC__1setMute (JNIEnv *env, jobje
     
     if ( libvlc_exception_raised( exception )) 
     {
-        ///\TODO: raise java exception
-        printf("%s\n", libvlc_exception_get_message( exception ));
+        handle_vlc_exception( env, exception );
     }
 
     free( exception );
@@ -172,8 +163,7 @@ JNIEXPORT void JNICALL Java_org_videolan_jvlc_JVLC__1toggleMute (JNIEnv *env, jo
     
     if ( libvlc_exception_raised( exception )) 
     {
-        ///\TODO: raise java exception
-        printf("%s\n", libvlc_exception_get_message( exception ));
+        handle_vlc_exception( env, exception );
     }
 
     free( exception );
@@ -196,8 +186,7 @@ JNIEXPORT jint JNICALL Java_org_videolan_jvlc_JVLC__1getVolume (JNIEnv *env, job
     
     if ( libvlc_exception_raised( exception )) 
     {
-        ///\TODO: raise java exception
-        printf("%s\n", libvlc_exception_get_message( exception ));
+        handle_vlc_exception( env, exception );
     }
 
     free( exception );
@@ -221,8 +210,7 @@ JNIEXPORT void JNICALL Java_org_videolan_jvlc_JVLC__1setVolume (JNIEnv *env, job
     
     if ( libvlc_exception_raised( exception )) 
     {
-        ///\TODO: raise java exception
-        printf("%s\n", libvlc_exception_get_message( exception ));
+        handle_vlc_exception( env, exception );
     }
 
     free( exception );
@@ -250,8 +238,7 @@ JNIEXPORT void JNICALL Java_org_videolan_jvlc_JVLC__1toggleFullscreen (JNIEnv *e
     
     if ( libvlc_exception_raised( exception )) 
     {
-        ///\TODO: raise java exception
-        printf("%s\n", libvlc_exception_get_message( exception ));
+        handle_vlc_exception( env, exception );
     }
 
     free( exception );
@@ -273,8 +260,7 @@ JNIEXPORT void JNICALL Java_org_videolan_jvlc_JVLC__1setFullscreen (JNIEnv *env,
     
     if ( libvlc_exception_raised( exception )) 
     {
-        ///\TODO: raise java exception
-        printf("%s\n", libvlc_exception_get_message( exception ));
+        handle_vlc_exception( env, exception );
     }
 
     free( exception );
@@ -297,8 +283,7 @@ JNIEXPORT jboolean JNICALL Java_org_videolan_jvlc_JVLC__1getFullscreen (JNIEnv *
     
     if ( libvlc_exception_raised( exception )) 
     {
-        ///\TODO: raise java exception
-        printf("%s\n", libvlc_exception_get_message( exception ));
+        handle_vlc_exception( env, exception );
     }
 
     free( exception );
@@ -321,16 +306,14 @@ JNIEXPORT void JNICALL Java_org_videolan_jvlc_JVLC__1getSnapshot (JNIEnv *env, j
 
     if ( libvlc_exception_raised( exception )) 
     {
-        ///\TODO: raise java exception
-        printf("%s\n", libvlc_exception_get_message( exception ));
+        handle_vlc_exception( env, exception );
     }
 
     libvlc_video_take_snapshot( input, (char *) psz_filepath, exception );
 
     if ( libvlc_exception_raised( exception )) 
     {
-        ///\TODO: raise java exception
-        printf("%s\n", libvlc_exception_get_message( exception ));
+        handle_vlc_exception( env, exception );
     }
 
     
@@ -357,8 +340,7 @@ JNIEXPORT jint JNICALL Java_org_videolan_jvlc_JVLC__1getVideoHeight (JNIEnv *env
     
     if ( libvlc_exception_raised( exception )) 
     {
-        ///\TODO: raise java exception
-        printf("%s\n", libvlc_exception_get_message( exception ));
+        handle_vlc_exception( env, exception );
     }
 
     free( exception );
@@ -383,8 +365,7 @@ JNIEXPORT jint JNICALL Java_org_videolan_jvlc_JVLC__1getVideoWidth (JNIEnv *env,
     
     if ( libvlc_exception_raised( exception )) 
     {
-        ///\TODO: raise java exception
-        printf("%s\n", libvlc_exception_get_message( exception ));
+        handle_vlc_exception( env, exception );
     }
 
     free( exception );
@@ -419,8 +400,17 @@ JNIEXPORT jint JNICALL Java_org_videolan_jvlc_Playlist__1playlist_1add (JNIEnv *
                env->GetStringUTFChars( ( jstring ) env->GetObjectArrayElement( options, i ), 0 );
        }
         res = libvlc_playlist_add_extended( ( libvlc_instance_t * ) instance, psz_uri, psz_name, i_options, ppsz_options, exception );
+        
+        if ( libvlc_exception_raised ( exception ) ) 
+        {
+            handle_vlc_exception( env, exception );
+        }            
     } else {
         res = libvlc_playlist_add( ( libvlc_instance_t * ) instance, psz_uri, psz_name, exception );
+        if ( libvlc_exception_raised ( exception ) ) 
+        {
+            handle_vlc_exception( env, exception );
+        }            
     }
  
     /// \todo check exceptions
@@ -451,18 +441,20 @@ JNIEXPORT void JNICALL Java_org_videolan_jvlc_Playlist__1play (JNIEnv *env, jobj
     libvlc_exception_init( exception );
 
     if ( options != NULL ) {
-       i_options = ( int ) env->GetArrayLength( ( jarray ) options ) + 1;
+       i_options = ( int ) env->GetArrayLength( ( jarray ) options );
        ppsz_options = ( const char ** ) malloc( i_options * sizeof( char* ) );
-       sprintf( ( char * ) ppsz_options[0], "%s", "jvlc" );
-
        for ( int i = 0; i < i_options - 1; i++ ) {
-           ppsz_options[ i+1 ] = 
+           ppsz_options[ i ] = 
                env->GetStringUTFChars( ( jstring ) env->GetObjectArrayElement( options, i ), 0 );
        }
     }
 
     libvlc_playlist_play( p_instance, id, i_options, ( char **  ) ppsz_options, exception );
-
+    if ( libvlc_exception_raised ( exception ) ) 
+    {
+        handle_vlc_exception( env, exception );
+    }            
+    
     free( exception );
     return;
 }
@@ -476,6 +468,10 @@ JNIEXPORT void JNICALL Java_org_videolan_jvlc_Playlist__1pause (JNIEnv *env, job
     instance = getPlaylistInstance( env, _this );
   
     libvlc_playlist_pause( ( libvlc_instance_t* ) instance, exception );
+    if ( libvlc_exception_raised ( exception ) ) 
+    {
+        handle_vlc_exception( env, exception );
+    }            
 
     free( exception );
     return;
@@ -488,10 +484,13 @@ JNIEXPORT void JNICALL Java_org_videolan_jvlc_Playlist__1stop (JNIEnv *env, jobj
     libvlc_exception_init( exception );
     instance = getPlaylistInstance( env, _this );
     libvlc_playlist_stop( ( libvlc_instance_t* ) instance, exception );
+    if ( libvlc_exception_raised ( exception ) ) 
+    {
+        handle_vlc_exception( env, exception );
+    }            
 
     free( exception );
     return;
-  
 }
 
 JNIEXPORT void JNICALL Java_org_videolan_jvlc_Playlist__1next (JNIEnv *env, jobject _this) {
@@ -501,7 +500,11 @@ JNIEXPORT void JNICALL Java_org_videolan_jvlc_Playlist__1next (JNIEnv *env, jobj
     libvlc_exception_init( exception );
     instance = getPlaylistInstance( env, _this );
     libvlc_playlist_next( ( libvlc_instance_t* ) instance, exception );
-
+    if ( libvlc_exception_raised ( exception ) ) 
+    {
+        handle_vlc_exception( env, exception );
+    }            
+    
     free( exception );
     return;
 
@@ -514,6 +517,10 @@ JNIEXPORT void JNICALL Java_org_videolan_jvlc_Playlist__1prev (JNIEnv *env, jobj
     libvlc_exception_init( exception );
     instance = getPlaylistInstance( env, _this );
     libvlc_playlist_prev( (libvlc_instance_t*) instance, exception );
+    if ( libvlc_exception_raised ( exception ) ) 
+    {
+        handle_vlc_exception( env, exception );
+    }            
 
     free( exception );
     return;
@@ -526,6 +533,10 @@ JNIEXPORT void JNICALL Java_org_videolan_jvlc_Playlist__1clear (JNIEnv *env, job
     libvlc_exception_init( exception );
     instance = getPlaylistInstance( env, _this );
     libvlc_playlist_clear( (libvlc_instance_t*) instance, exception );
+    if ( libvlc_exception_raised ( exception ) ) 
+    {
+        handle_vlc_exception( env, exception );
+    }            
 
     free( exception );
     return;
@@ -539,6 +550,10 @@ JNIEXPORT void JNICALL Java_org_videolan_jvlc_Playlist__1deleteItem (JNIEnv *env
     instance = getPlaylistInstance( env, _this );
 
     libvlc_playlist_delete_item( ( libvlc_instance_t * ) instance, itemID, exception );
+    if ( libvlc_exception_raised ( exception ) ) 
+    {
+        handle_vlc_exception( env, exception );
+    }            
 
     free( exception );
     return;
@@ -553,6 +568,10 @@ JNIEXPORT jint JNICALL Java_org_videolan_jvlc_Playlist__1itemsCount (JNIEnv *env
     libvlc_exception_init( exception );
     instance = getPlaylistInstance( env, _this );
     res = libvlc_playlist_items_count( (libvlc_instance_t*) instance, exception );
+    if ( libvlc_exception_raised ( exception ) ) 
+    {
+        handle_vlc_exception( env, exception );
+    }            
 
     free( exception );
     return res;
@@ -567,6 +586,10 @@ JNIEXPORT jint JNICALL Java_org_videolan_jvlc_Playlist__1isRunning (JNIEnv *env,
     libvlc_exception_init( exception );
     instance = getPlaylistInstance( env, _this );
     res = libvlc_playlist_isplaying( (libvlc_instance_t*) instance, exception );
+    if ( libvlc_exception_raised ( exception ) ) 
+    {
+        handle_vlc_exception( env, exception );
+    }            
 
     free( exception );
     return res;
@@ -584,10 +607,16 @@ JNIEXPORT jboolean JNICALL Java_org_videolan_jvlc_Playlist__1inputIsPlaying (JNI
     instance = getPlaylistInstance( env, _this );
     
     input = libvlc_playlist_get_input( ( libvlc_instance_t* ) instance, exception );
-    /// \todo check exceptions
+    if ( libvlc_exception_raised ( exception ) ) 
+    {
+        handle_vlc_exception( env, exception );
+    }            
     
     res = libvlc_input_will_play( input, exception );
-    /// \todo check exceptions
+    if ( libvlc_exception_raised ( exception ) ) 
+    {
+        handle_vlc_exception( env, exception );
+    }            
 
     free( exception );
     return res;    
@@ -604,10 +633,16 @@ JNIEXPORT jboolean JNICALL Java_org_videolan_jvlc_Playlist__1inputHasVout (JNIEn
     instance = getPlaylistInstance( env, _this );
     
     input = libvlc_playlist_get_input( ( libvlc_instance_t* ) instance, exception );
-    /// \todo check exceptions
-    
+    if ( libvlc_exception_raised ( exception ) ) 
+    {
+        handle_vlc_exception( env, exception );
+    }            
+
     res = libvlc_input_has_vout( input, exception );
-    /// \todo check exceptions
+    if ( libvlc_exception_raised ( exception ) ) 
+    {
+        handle_vlc_exception( env, exception );
+    }
 
     free( exception );
     return res;    
@@ -628,9 +663,16 @@ JNIEXPORT jlong JNICALL Java_org_videolan_jvlc_JVLC__1getInputLength (JNIEnv *en
     instance = getPlaylistInstance( env, _this );
     
     input = libvlc_playlist_get_input( ( libvlc_instance_t* ) instance, exception );
-    /// \todo check exceptions
+    if ( libvlc_exception_raised ( exception ) ) 
+    {
+        handle_vlc_exception( env, exception );
+    }
     
     res = libvlc_input_get_length( input, exception );
+    if ( libvlc_exception_raised ( exception ) ) 
+    {
+        handle_vlc_exception( env, exception );
+    }
 
     free( exception );
     return res;    
@@ -647,9 +689,17 @@ JNIEXPORT jlong JNICALL Java_org_videolan_jvlc_JVLC__1getInputTime (JNIEnv *env,
     instance = getPlaylistInstance( env, _this );
     
     input = libvlc_playlist_get_input( ( libvlc_instance_t* ) instance, exception );
-    /// \todo check exceptions
+    if ( libvlc_exception_raised ( exception ) ) 
+    {
+        handle_vlc_exception( env, exception );
+    }
+
     
     res = libvlc_input_get_time( input, exception );
+    if ( libvlc_exception_raised ( exception ) ) 
+    {
+        handle_vlc_exception( env, exception );
+    }
 
     free( exception );
     return res;    
@@ -667,9 +717,17 @@ JNIEXPORT jfloat JNICALL Java_org_videolan_jvlc_JVLC__1getInputPosition (JNIEnv
     instance = getPlaylistInstance( env, _this );
     
     input = libvlc_playlist_get_input( ( libvlc_instance_t* ) instance, exception );
+    if ( libvlc_exception_raised ( exception ) ) 
+    {
+        handle_vlc_exception( env, exception );
+    }
 
     res = libvlc_input_get_position( input, exception );
-    /// \todo handle exceptions
+    if ( libvlc_exception_raised ( exception ) ) 
+    {
+        handle_vlc_exception( env, exception );
+    }
+
     free( exception );
     
     return res;
@@ -688,15 +746,257 @@ JNIEXPORT jfloat JNICALL Java_org_videolan_jvlc_JVLC__1getInputFPS (JNIEnv *env,
     instance = getPlaylistInstance( env, _this );
     
     input = libvlc_playlist_get_input( ( libvlc_instance_t* ) instance, exception );
+    if ( libvlc_exception_raised ( exception ) ) 
+    {
+        handle_vlc_exception( env, exception );
+    }
 
     res = libvlc_input_get_fps( input, exception );
-    /// \todo handle exceptions
+    if ( libvlc_exception_raised ( exception ) ) 
+    {
+        handle_vlc_exception( env, exception );
+    }
+
     free( exception );
     
     return res;
 }
 
 
+/*
+ *  VLM native functions
+ */
+
+/*
+ * Class:     org_videolan_jvlc_JVLC
+ * Method:    _addBroadcast
+ * Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;ZZ)V
+ */
+JNIEXPORT void JNICALL Java_org_videolan_jvlc_JVLC__1addBroadcast(JNIEnv *env, jobject _this, jstring name,jstring inputmrl, jstring outputmrl, jobjectArray options, jboolean enable, jboolean loop) {
+  const char* psz_name = env->GetStringUTFChars( name, 0 );    
+  const char* psz_inputmrl = env->GetStringUTFChars( inputmrl, 0 );    
+  const char* psz_outputmrl = env->GetStringUTFChars( outputmrl, 0 );        
+  long instance = 0;
+  libvlc_exception_t *exception = (libvlc_exception_t *) malloc( sizeof( libvlc_exception_t ));
+
+  int i_options = 0;
+  const char** ppsz_options = NULL;
+
+  if ( options != NULL ) {
+       i_options = ( int ) env->GetArrayLength( ( jarray ) options );
+       ppsz_options = ( const char ** ) malloc( i_options * sizeof( char* ) );
+
+       for ( int i = 0; i < i_options - 1; i++ ) {
+           ppsz_options[ i ] = 
+               env->GetStringUTFChars( ( jstring ) env->GetObjectArrayElement( options, i ), 0 );
+       }
+    }
+
+
+  libvlc_exception_init( exception );
+  
+  instance = getPlaylistInstance( env, _this );  
+
+  libvlc_vlm_add_broadcast( (libvlc_instance_t *) instance, (char*)psz_name, (char*)psz_inputmrl, (char*)psz_outputmrl ,
+                               i_options, (char**)ppsz_options, enable, loop, exception );
+
+
+   if (psz_name != NULL) {
+       env->ReleaseStringUTFChars( name, psz_name );
+   }    
+   if (psz_inputmrl != NULL) {
+       env->ReleaseStringUTFChars( inputmrl, psz_inputmrl );
+   }    
+   if (psz_outputmrl != NULL) {
+       env->ReleaseStringUTFChars( outputmrl, psz_outputmrl );
+   }
+   
+   handle_vlc_exception(env,exception);
+
+   free(exception);
+}
+
+/*
+ * Class:     org_videolan_jvlc_JVLC
+ * Method:    _deleteMedia
+ * Signature: (Ljava/lang/String;)V
+ */
+JNIEXPORT void JNICALL Java_org_videolan_jvlc_JVLC__1deleteMedia(JNIEnv *env, jobject _this, jstring name) {
+    long instance = 0;
+    const char* psz_name = env->GetStringUTFChars( name, 0 );
+    libvlc_exception_t *exception = (libvlc_exception_t *) malloc( sizeof( libvlc_exception_t ));
+
+    libvlc_exception_init( exception );
+
+    instance = getPlaylistInstance( env, _this );
+
+    libvlc_vlm_del_media( (libvlc_instance_t *) instance, (char*)psz_name, exception);    
+    handle_vlc_exception(env,exception);
+    /* free resources */
+    free(exception);
+
+    if (psz_name != NULL) {
+        env->ReleaseStringUTFChars( name, psz_name );
+    }    
+}
+
+/*
+ * Class:     org_videolan_jvlc_JVLC
+ * Method:    _setEnabled
+ * Signature: (Ljava/lang/String;Z)V
+ */
+JNIEXPORT void JNICALL Java_org_videolan_jvlc_JVLC__1setEnabled(JNIEnv *env, jobject _this, jstring name, jboolean newStatus) {
+    long instance = 0;
+    const char* psz_name = env->GetStringUTFChars( name, 0 );
+    libvlc_exception_t *exception = (libvlc_exception_t *) malloc( sizeof( libvlc_exception_t ));
+
+    libvlc_exception_init( exception );
+
+    instance = getPlaylistInstance( env, _this );
+
+    libvlc_vlm_set_enabled( (libvlc_instance_t *) instance, (char*)psz_name, newStatus, exception);
+
+    handle_vlc_exception(env,exception);
+    /* free resources */
+    free(exception);
+
+    if (psz_name != NULL) {
+        env->ReleaseStringUTFChars( name, psz_name );
+    }        
+}
+
+/*
+ * Class:     org_videolan_jvlc_JVLC
+ * Method:    _setOutput
+ * Signature: (Ljava/lang/String;Ljava/lang/String;)V
+ */
+JNIEXPORT void JNICALL Java_org_videolan_jvlc_JVLC__1setOutput(JNIEnv *env, jobject _this, jstring name, jstring mrl) {
+   long instance = 0;
+    const char* psz_name = env->GetStringUTFChars( name, 0 );
+    const char* psz_mrl = env->GetStringUTFChars( mrl, 0 );    
+    libvlc_exception_t *exception = (libvlc_exception_t *) malloc( sizeof( libvlc_exception_t ));
+
+    libvlc_exception_init( exception );
+
+    instance = getPlaylistInstance( env, _this );
+
+    libvlc_vlm_set_output((libvlc_instance_t *) instance, (char*)psz_name, (char*)psz_mrl, exception);
+
+    handle_vlc_exception(env,exception);
+    /* free resources */
+    free(exception);
+
+    if (psz_name != NULL) {
+        env->ReleaseStringUTFChars( name, psz_name );
+    }    
+    if (psz_mrl != NULL) {
+        env->ReleaseStringUTFChars( mrl, psz_mrl );
+    }    
+}
+
+/*
+ * Class:     org_videolan_jvlc_JVLC
+ * Method:    _setInput
+ * Signature: (Ljava/lang/String;Ljava/lang/String;)V
+ */
+JNIEXPORT void JNICALL Java_org_videolan_jvlc_JVLC__1setInput(JNIEnv *env, jobject _this, jstring name, jstring mrl) {
+   long instance = 0;
+    const char* psz_name = env->GetStringUTFChars( name, 0 );
+    const char* psz_mrl = env->GetStringUTFChars( mrl, 0 );    
+    libvlc_exception_t *exception = (libvlc_exception_t *) malloc( sizeof( libvlc_exception_t ));
+
+    libvlc_exception_init( exception );
+
+    instance = getPlaylistInstance( env, _this );
+
+    libvlc_vlm_set_input((libvlc_instance_t *) instance, (char*)psz_name, (char*)psz_mrl, exception);
+    
+    handle_vlc_exception(env,exception);
+    /* free resources */
+    free(exception);
+
+    if (psz_name != NULL) {
+        env->ReleaseStringUTFChars( name, psz_name );
+    }    
+    if (psz_mrl != NULL) {
+        env->ReleaseStringUTFChars( mrl, psz_mrl );
+    }    
+}
+
+/*
+ * Class:     org_videolan_jvlc_JVLC
+ * Method:    _setLoop
+ * Signature: (Ljava/lang/String;Z)V
+ */
+JNIEXPORT void JNICALL Java_org_videolan_jvlc_JVLC__1setLoop(JNIEnv *env, jobject _this, jstring name, jboolean newStatus) {
+   long instance = 0;
+    const char* psz_name = env->GetStringUTFChars( name, 0 );
+    libvlc_exception_t *exception = (libvlc_exception_t *) malloc( sizeof( libvlc_exception_t ));
+
+    libvlc_exception_init( exception );
+
+    instance = getPlaylistInstance( env, _this );
+
+    libvlc_vlm_set_loop((libvlc_instance_t *) instance, (char*)psz_name, newStatus, exception);
+
+    handle_vlc_exception(env,exception);
+    /* free resources */
+    free(exception);
+
+    if (psz_name != NULL) {
+        env->ReleaseStringUTFChars( name, psz_name );
+    }    
+}
+
+/*
+ * Class:     org_videolan_jvlc_JVLC
+ * Method:    _changeMedia
+ * Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;ZZ)V
+ */
+JNIEXPORT void JNICALL Java_org_videolan_jvlc_JVLC__1changeMedia(JNIEnv *env, jobject _this, jstring name, jstring inputmrl, jstring outputmrl, jobjectArray options, jboolean enablenewbroadcast, jboolean broadcast) {
+   int i_options = 0;
+   const char** ppsz_options = NULL;
+   long instance = 0;
+   if ( options != NULL ) {
+       i_options = ( int ) env->GetArrayLength( ( jarray ) options );
+       ppsz_options = ( const char ** ) malloc( i_options * sizeof( char* ) );
+
+       for ( int i = 0; i < i_options - 1; i++ ) {
+           ppsz_options[ i ] = 
+               env->GetStringUTFChars( ( jstring ) env->GetObjectArrayElement( options, i ), 0 );
+       }
+    }
+
+   const char* psz_name = env->GetStringUTFChars( name, 0 );
+   const char* psz_inputmrl = env->GetStringUTFChars( inputmrl, 0 );    
+   const char* psz_outputmrl = env->GetStringUTFChars( outputmrl, 0 );        
+   libvlc_exception_t *exception = (libvlc_exception_t *) malloc( sizeof( libvlc_exception_t ));
+
+   libvlc_exception_init( exception );
+
+   instance = getPlaylistInstance( env, _this );
+
+   libvlc_vlm_change_media( (libvlc_instance_t *) instance, (char*)psz_name, (char*)psz_inputmrl, (char*)psz_outputmrl ,
+                              i_options, (char**)ppsz_options, enablenewbroadcast, broadcast, exception );
+
+   handle_vlc_exception(env,exception);
+
+   if (psz_name != NULL) {
+        env->ReleaseStringUTFChars( name, psz_name );
+   }    
+
+   if (psz_inputmrl != NULL) {
+        env->ReleaseStringUTFChars( name, psz_inputmrl );
+   }    
+
+   if (psz_outputmrl != NULL) {
+        env->ReleaseStringUTFChars( name, psz_outputmrl );
+   }    
+   
+}
+
+
 
 /*
  * Utility functions