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)
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
$(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
import org.videolan.jvlc.JVLC;
+import org.videolan.jvlc.VLCException;
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
{
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);
+/*****************************************************************************
+ * 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() {
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) {
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;
}
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;
}
package org.videolan.jvlc;
-public interface JLibVLC extends AudioIntf, VideoIntf, InputIntf { }
+public interface JLibVLC extends AudioIntf, VideoIntf, InputIntf, VLMIntf { }
* 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" );
}
/**
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();
}
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.
*/
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 {
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();
}
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;
}
--- /dev/null
+/*****************************************************************************
+ * 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);
+ }
+}
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;
}
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;
/**
* 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;
}
#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 */
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;
* 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;
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
if ( libvlc_exception_raised( exception ))
{
- ///\TODO: raise java exception
- printf("%s\n", libvlc_exception_get_message( exception ));
+ handle_vlc_exception( env, exception );
}
free( exception );
if ( libvlc_exception_raised( exception ))
{
- ///\TODO: raise java exception
- printf("%s\n", libvlc_exception_get_message( exception ));
+ handle_vlc_exception( env, exception );
}
free( exception );
if ( libvlc_exception_raised( exception ))
{
- ///\TODO: raise java exception
- printf("%s\n", libvlc_exception_get_message( exception ));
+ handle_vlc_exception( env, exception );
}
free( exception );
if ( libvlc_exception_raised( exception ))
{
- ///\TODO: raise java exception
- printf("%s\n", libvlc_exception_get_message( exception ));
+ handle_vlc_exception( env, exception );
}
free( exception );
if ( libvlc_exception_raised( exception ))
{
- ///\TODO: raise java exception
- printf("%s\n", libvlc_exception_get_message( exception ));
+ handle_vlc_exception( env, exception );
}
free( exception );
if ( libvlc_exception_raised( exception ))
{
- ///\TODO: raise java exception
- printf("%s\n", libvlc_exception_get_message( exception ));
+ handle_vlc_exception( env, exception );
}
free( exception );
if ( libvlc_exception_raised( exception ))
{
- ///\TODO: raise java exception
- printf("%s\n", libvlc_exception_get_message( exception ));
+ handle_vlc_exception( env, exception );
}
free( exception );
if ( libvlc_exception_raised( exception ))
{
- ///\TODO: raise java exception
- printf("%s\n", libvlc_exception_get_message( exception ));
+ handle_vlc_exception( env, exception );
}
free( exception );
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 );
}
if ( libvlc_exception_raised( exception ))
{
- ///\TODO: raise java exception
- printf("%s\n", libvlc_exception_get_message( exception ));
+ handle_vlc_exception( env, exception );
}
free( exception );
if ( libvlc_exception_raised( exception ))
{
- ///\TODO: raise java exception
- printf("%s\n", libvlc_exception_get_message( exception ));
+ handle_vlc_exception( env, exception );
}
free( exception );
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
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;
}
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;
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) {
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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