Commit daa85a7f authored by Filippo Carone's avatar Filippo Carone

java bindings huge update

parent 4713a367
...@@ -102,6 +102,7 @@ S: France ...@@ -102,6 +102,7 @@ S: France
N: Filippo Carone N: Filippo Carone
E: filippo[dontspam]@carone.org E: filippo[dontspam]@carone.org
C: littlejohn
D: Java bindings D: Java bindings
S: Italy S: Italy
......
SUBDIRS = python java SUBDIRS = python
#######################################################################
# VLC Java Bindings
#######################################################################
SUBDIRS= . src
EXTRA_DIST= \
FAQ \
TODO \
README \
THANKS \
javadoc.xml \
VlcClient.java \
VLCExample.java
EXTRA_DIST+= \
org/videolan/jvlc/AudioIntf.java \
org/videolan/jvlc/Audio.java \
org/videolan/jvlc/GenericVideoWidget.java \
org/videolan/jvlc/InputIntf.java \
org/videolan/jvlc/Input.java \
org/videolan/jvlc/JLibVLC.java \
org/videolan/jvlc/JVLCCanvas.java \
org/videolan/jvlc/JVLC.java \
org/videolan/jvlc/JVLCPanel.java \
org/videolan/jvlc/PlaylistIntf.java \
org/videolan/jvlc/Playlist.java \
org/videolan/jvlc/VideoIntf.java \
org/videolan/jvlc/Video.java \
org/videolan/jvlc/VLCException.java \
org/videolan/jvlc/VLMIntf.java \
org/videolan/jvlc/VLM.java \
org/videolan/jvlc/listener/VolumeListener.java
if BUILD_JAVA
OBJECTS = org/videolan/jvlc/VLM.class org/videolan/jvlc/VLCException.class org/videolan/jvlc/Playlist.class org/videolan/jvlc/AudioIntf.class org/videolan/jvlc/Audio.class org/videolan/jvlc/InputIntf.class org/videolan/jvlc/Input.class org/videolan/jvlc/PlaylistIntf.class org/videolan/jvlc/VideoIntf.class org/videolan/jvlc/JVLCCanvas.class org/videolan/jvlc/Video.class org/videolan/jvlc/JLibVLC.class org/videolan/jvlc/JVLC.class org/videolan/jvlc/JVLCPanel.class org/videolan/jvlc/VLMIntf.class org/videolan/jvlc/GenericVideoWidget.class org/videolan/jvlc/listener/VolumeListener.class
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
else
JINCLUDES = -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/linux
LIBJINCLUDES = -L$(JAVA_HOME)/jre/lib/$(PROCESSOR_FAMILY) -ljawt
endif
export JINCLUDES
export LIBJINCLUDES
# Build targets
%.class: %.java
$(JAVAC) $?
VlcClient: $(OBJECTS)
$(JAVAC) VlcClient.java
VLCExample: $(OBJECTS)
$(JAVAC) VLCExample.java
all-am: VlcClient VLCExample
clean-local:
rm -f *.class *~ org/videolan/jvlc/*.class src/*.o *.so *.o *.dll
endif
...@@ -2,33 +2,40 @@ ...@@ -2,33 +2,40 @@
First of all, this is a *developers* only version First of all, this is a *developers* only version
Usage Compiling JVLC
----- --------------
In order to use these bindings you have to compile vlc from source. I In order to use these bindings you have to compile vlc from source, be sure
recommend you to take the latest version from videolan svn repository to use the latest git version (see http://wiki.videolan.org/Git for instructions
(or use at least revison 18443) by doing: on how to get the latest vlc version).
svn co svn://svn.videolan.org/vlc/trunk vlc-trunk JVLC depends on JNA, you can download JNA from http://jna.dev.java.net .
bootstrap, clean, set environment variables, configure and build: JVLC is developed using the Sun JDK version 6, but version 5 should be fine too.
./bootstrap Until the build.xml will be ready, you may compile jvlc issueing from the bindings
java folder:
export JAVA_HOME=/path/to/jvm mkdir output
(for example i have JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun) javac -d output -cp <path-to>/jna.jar -g org/videolan/jvlc/internal/*.java org/videolan/jvlc/event/*.java org/videolan/jvlc/*.java VLCExample.java VlcClient.java
./configure --enable-java-bindings && make && make install where <path-to> is the folder where the file jna.jar is contained
and in the output folder you'll find the compiled classes.
You may also import jvlc in eclipse running the createEclipseProject.sh script.
Running JVLC Example
--------------------
To run a Java VLC example issue (be sure you have an a.avi and a.mp3 files To run a Java VLC example issue (be sure you have an a.avi and a.mp3 files
in your user.dir folder): in your user.dir folder):
java -Djava.library.path=/usr/local/lib VLCExample java -cp .:<path-to>jna.jar -Djna.library.path=/usr/local/lib VLCExample
(if you have specified a prefix in configure, change /usr/local/lib to (if you have specified a prefix in configure, change /usr/local/lib to
PREFIX/lib) PREFIX/lib)
Be sure your ldconfig can find libjawt.so and libmawt.so or you will
get linking errors when you run the program.
Happy playing. Happy playing.
import org.videolan.jvlc.AudioIntf;
import org.videolan.jvlc.JVLC; import org.videolan.jvlc.JVLC;
import org.videolan.jvlc.MediaDescriptor;
import org.videolan.jvlc.MediaInstance;
import org.videolan.jvlc.Playlist;
import org.videolan.jvlc.VLCException; import org.videolan.jvlc.VLCException;
import org.videolan.jvlc.listener.VolumeListener; import org.videolan.jvlc.Video;
import org.videolan.jvlc.event.MediaInstanceListener;
public class VLCExample public class VLCExample
...@@ -24,131 +27,147 @@ public class VLCExample ...@@ -24,131 +27,147 @@ public class VLCExample
} }
} }
JVLC jvlc = new JVLC(args); JVLC jvlc = new JVLC(args);
Playlist playlist = new Playlist(jvlc);
System.out.println("... done."); System.out.println("... done.");
try
{
// jvlc.playlist.add("file://" + System.getProperty( "user.dir" ) + "/a.avi", "a.avi");
jvlc.playlist.add("file:///home/little/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())
{
Thread.sleep(100);
}
while (! jvlc.hasVout() )
{
Thread.sleep(100);
}
// testing vout functionalities
Thread.sleep(2500);
if (jvlc.hasVout())
{
videoInput = true;
}
if (videoInput) MediaDescriptor mediaDescriptor = new MediaDescriptor(jvlc, "/home/carone/a.avi");
MediaInstance mediaInstance = mediaDescriptor.getMediaInstance();
mediaInstance.addListener(new MediaInstanceListener()
{ {
try @Override
public void endReached(MediaInstance mediaInstance)
{ {
System.out.print(jvlc.video.getWidth()); System.out.println("Media instance end reached. MRL: " + mediaInstance.getMediaDescriptor().getMrl());
System.out.print("x");
System.out.println(jvlc.video.getHeight());
} }
catch (VLCException e)
@Override
public void paused(MediaInstance mediaInstance)
{ {
e.printStackTrace(); System.out.println("Media instance paused. MRL: " + mediaInstance.getMediaDescriptor().getMrl());
} }
}
try
{
if (videoInput)
{
System.out.print("Fullscreen... ");
jvlc.video.setFullscreen(true);
Thread.sleep(3000);
System.out.println("real size.");
jvlc.video.setFullscreen(false);
System.out.print("Taking snapshot... ");
jvlc.video.getSnapshot(System.getProperty("user.dir") + "/snap.png",0,0);
System.out.println("taken. (see " + System.getProperty("user.dir") + "/snap.png )");
Thread.sleep(2000);
System.out.println("Resizing to 300x300");
jvlc.video.setSize(300, 300);
} @Override
jvlc.audio.addVolumeListener(new VolumeListener() public void played(MediaInstance mediaInstance)
{ {
public void volumeChanged() { System.out.println("Media instance played. MRL: " + mediaInstance.getMediaDescriptor().getMrl());
System.out.println("====> From the listener: volume changed."); }
}
});
System.out.print("Muting...");
jvlc.audio.setMute(true);
Thread.sleep(3000);
System.out.println("unmuting.");
jvlc.audio.setMute(false);
Thread.sleep(3000);
System.out.println("Volume is: " + jvlc.audio.getVolume());
System.out.print("Setting volume to 150... ");
jvlc.audio.setVolume(150);
System.out.println("done");
System.out.println("== AUDIO INFO ==");
int currentChannel = jvlc.audio.getChannel();
System.out.println("Audio track number: " + jvlc.audio.getTrack());
System.out.println("Audio channel info: " + jvlc.audio.getChannel());
System.out.print("Setting left channel... ");
jvlc.audio.setChannel(AudioIntf.LEFT_CHANNEL);
System.out.println("done.");
Thread.sleep(3000);
System.out.print("Setting right channel... ");
jvlc.audio.setChannel(AudioIntf.RIGHT_CHANNEL);
System.out.println("done.");
Thread.sleep(3000);
System.out.print("Reverting to original channel");
jvlc.audio.setChannel(currentChannel);
System.out.println("done.");
Thread.sleep(3000);
System.out.println("INPUT INFORMATION");
System.out.println("-----------------");
System.out.println("Total length (ms) :\t" + jvlc.input.getLength());
System.out.println("Input time (ms) :\t" + jvlc.input.getTime());
System.out.println("Input position [0-1]:\t" + jvlc.input.getPosition());
if (videoInput)
System.out.println("Input FPS :\t" + jvlc.input.getFPS());
} @Override
public void positionChanged(MediaInstance mediaInstance)
{
// TODO Auto-generated method stub
}
catch (Exception e) @Override
{ public void timeChanged(MediaInstance mediaInstance, long newTime)
System.out.println("Something was wrong. I die :(."); {
jvlc.destroy(); System.out.println("new time: " + newTime);
e.printStackTrace(); }
System.exit(0); });
} mediaInstance.play();
// MediaInstance mediaInstance = playlist.getMediaInstance();
//
// while (! mediaInstance. playlist.isPlaying())
// {
// Thread.sleep(100);
// }
// while (! jvlc.hasVout() )
// {
// Thread.sleep(100);
// }
System.out.println("Everything fine ;)"); // testing vout functionalities
System.out.println("Playing next item"); // Thread.sleep(2500);
// if (jvlc.hasVout())
// {
// videoInput = true;
// }
//
// if (videoInput)
// {
try try
{ {
jvlc.playlist.next(); Video video = new Video(jvlc);
System.out.print(video.getWidth(mediaInstance));
System.out.print("x");
System.out.println(video.getHeight(mediaInstance));
System.out.print("Fullscreen... ");
video.setFullscreen(mediaInstance, true);
Thread.sleep(3000);
System.out.println("real size.");
video.setFullscreen(mediaInstance, false);
System.out.print("Taking snapshot... ");
video.getSnapshot(mediaInstance, System.getProperty("user.dir") + "/snap.png", 0, 0);
System.out.println("taken. (see " + System.getProperty("user.dir") + "/snap.png )");
Thread.sleep(2000);
System.out.println("Resizing to 300x300");
video.setSize(300, 300);
} }
catch (VLCException e) catch (VLCException e)
{ {
e.printStackTrace(); e.printStackTrace();
} }
Thread.sleep(3000); // System.out.print("Muting...");
// jvlc.audio.setMute(true);
// Thread.sleep(3000);
// System.out.println("unmuting.");
// jvlc.audio.setMute(false);
// Thread.sleep(3000);
// System.out.println("Volume is: " + jvlc.audio.getVolume());
// System.out.print("Setting volume to 150... ");
// jvlc.audio.setVolume(150);
// System.out.println("done");
// System.out.println("== AUDIO INFO ==");
// int currentChannel = jvlc.audio.getChannel();
// System.out.println("Audio track number: " + jvlc.audio.getTrack());
// System.out.println("Audio channel info: " + jvlc.audio.getChannel());
// System.out.print("Setting left channel... ");
// jvlc.audio.setChannel(AudioIntf.LEFT_CHANNEL);
// System.out.println("done.");
// Thread.sleep(3000);
// System.out.print("Setting right channel... ");
// jvlc.audio.setChannel(AudioIntf.RIGHT_CHANNEL);
// System.out.println("done.");
// Thread.sleep(3000);
// System.out.print("Reverting to original channel");
// jvlc.audio.setChannel(currentChannel);
// System.out.println("done.");
// Thread.sleep(3000);
// System.out.println("INPUT INFORMATION");
// System.out.println("-----------------");
// System.out.println("Total length (ms) :\t" + jvlc.input.getLength());
// System.out.println("Input time (ms) :\t" + jvlc.input.getTime());
// System.out.println("Input position [0-1]:\t" + jvlc.input.getPosition());
// if (videoInput)
// System.out.println("Input FPS :\t" + jvlc.input.getFPS());
//
// }
//
// catch (Exception e)
// {
// System.out.println("Something was wrong. I die :(.");
// jvlc.destroy();
// e.printStackTrace();
// System.exit(0);
// }
System.out.println("Everything fine ;)");
System.out.println("Playing next item");
// try
// {
// jvlc.playlist.next();
// }
// catch (VLCException e)
// {
// e.printStackTrace();
// }
//
// Thread.sleep(3000);
jvlc.destroy(); // jvlc.destroy();
return; return;
} }
} }
...@@ -23,31 +23,49 @@ ...@@ -23,31 +23,49 @@
* *
*/ */
import java.awt.Canvas;
import java.awt.Frame; import java.awt.Frame;
import java.awt.event.WindowAdapter; import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent; import java.awt.event.WindowEvent;
import org.videolan.jvlc.JVLCPanel; import javax.swing.JPanel;
import org.videolan.jvlc.JVLC; import org.videolan.jvlc.JVLC;
import org.videolan.jvlc.Playlist;
import org.videolan.jvlc.VLCException; import org.videolan.jvlc.VLCException;
class VLCPlayerFrame extends Frame {
public VLCPlayerFrame() { class VLCPlayerFrame extends Frame
{
private Playlist playlist;
public Canvas jvcanvas;
public VLCPlayerFrame()
{
initComponents(); initComponents();
} }
private void initComponents() {
java.awt.GridBagConstraints gridBagConstraints; private void initComponents()
{
fullScreenButton = new javax.swing.JButton(); java.awt.GridBagConstraints gridBagConstraints;
jTextField1 = new javax.swing.JTextField();
setButton = new javax.swing.JButton();
pauseButton = new javax.swing.JButton();
stopButton = new javax.swing.JButton();
jvcc = new JVLCPanel(); fullScreenButton = new javax.swing.JButton();
jvlc = jvcc.getJVLCObject(); jTextField1 = new javax.swing.JTextField();
setButton = new javax.swing.JButton();
pauseButton = new javax.swing.JButton();
stopButton = new javax.swing.JButton();
jvcc = new JPanel();
jvcanvas = new java.awt.Canvas();
jvcanvas.setSize(200, 200);
jvcc.add(jvcanvas);
jvlc = new JVLC();
playlist = new Playlist(jvlc);
setLayout(new java.awt.GridBagLayout()); setLayout(new java.awt.GridBagLayout());
...@@ -55,11 +73,14 @@ class VLCPlayerFrame extends Frame { ...@@ -55,11 +73,14 @@ class VLCPlayerFrame extends Frame {
gridBagConstraints.gridwidth = java.awt.GridBagConstraints.CENTER; gridBagConstraints.gridwidth = java.awt.GridBagConstraints.CENTER;
gridBagConstraints.gridx = 0; gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0; gridBagConstraints.gridy = 0;
add( jvcc , gridBagConstraints); add(jvcc, gridBagConstraints);
fullScreenButton.setText("FullScreen"); fullScreenButton.setText("FullScreen");
fullScreenButton.addActionListener(new java.awt.event.ActionListener() { fullScreenButton.addActionListener(new java.awt.event.ActionListener()
public void actionPerformed(java.awt.event.ActionEvent evt) { {
public void actionPerformed(java.awt.event.ActionEvent evt)
{
fullScreenButtonActionPerformed(evt); fullScreenButtonActionPerformed(evt);
} }
}); });
...@@ -68,8 +89,7 @@ class VLCPlayerFrame extends Frame { ...@@ -68,8 +89,7 @@ class VLCPlayerFrame extends Frame {
gridBagConstraints.gridx = 0; gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 2; gridBagConstraints.gridy = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
add( fullScreenButton, gridBagConstraints); add(fullScreenButton, gridBagConstraints);
jTextField1.setText("file://a.avi"); jTextField1.setText("file://a.avi");
gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints = new java.awt.GridBagConstraints();
...@@ -79,10 +99,12 @@ class VLCPlayerFrame extends Frame { ...@@ -79,10 +99,12 @@ class VLCPlayerFrame extends Frame {
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
add(jTextField1, gridBagConstraints); add(jTextField1, gridBagConstraints);
setButton.setText("Set item"); setButton.setText("Set item");
setButton.addActionListener(new java.awt.event.ActionListener() { setButton.addActionListener(new java.awt.event.ActionListener()
public void actionPerformed(java.awt.event.ActionEvent evt) { {
public void actionPerformed(java.awt.event.ActionEvent evt)
{
setButtonActionPerformed(evt); setButtonActionPerformed(evt);
} }
}); });
...@@ -92,10 +114,12 @@ class VLCPlayerFrame extends Frame { ...@@ -92,10 +114,12 @@ class VLCPlayerFrame extends Frame {
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
add(setButton, gridBagConstraints); add(setButton, gridBagConstraints);
pauseButton.setText("Play/Pause"); pauseButton.setText("Play/Pause");
pauseButton.addActionListener(new java.awt.event.ActionListener() { pauseButton.addActionListener(new java.awt.event.ActionListener()
public void actionPerformed(java.awt.event.ActionEvent evt) { {
public void actionPerformed(java.awt.event.ActionEvent evt)
{
pauseButtonActionPerformed(evt); pauseButtonActionPerformed(evt);
} }
}); });
...@@ -106,8 +130,11 @@ class VLCPlayerFrame extends Frame { ...@@ -106,8 +130,11 @@ class VLCPlayerFrame extends Frame {
add(pauseButton, gridBagConstraints); add(pauseButton, gridBagConstraints);
stopButton.setText("Stop"); stopButton.setText("Stop");
stopButton.addActionListener(new java.awt.event.ActionListener() { stopButton.addActionListener(new java.awt.event.ActionListener()
public void actionPerformed(java.awt.event.ActionEvent evt) { {
public void actionPerformed(java.awt.event.ActionEvent evt)
{
stopButtonActionPerformed(evt); stopButtonActionPerformed(evt);
} }
}); });
...@@ -116,67 +143,89 @@ class VLCPlayerFrame extends Frame { ...@@ -116,67 +143,89 @@ class VLCPlayerFrame extends Frame {
gridBagConstraints.gridy = 2; gridBagConstraints.gridy = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
add(stopButton, gridBagConstraints); add(stopButton, gridBagConstraints);
pack(); pack();
} }
private void stopButtonActionPerformed(java.awt.event.ActionEvent evt) { private void stopButtonActionPerformed(java.awt.event.ActionEvent evt)
try { {
//mci.stop(new Position(10000, PositionOrigin.ABSOLUTE, PositionKey.MEDIATIME)); try
jvlc.playlist.stop(); {
} catch (Exception e) { playlist.stop();
}
catch (Exception e)
{
e.printStackTrace(); e.printStackTrace();
} }
} }
private void pauseButtonActionPerformed(java.awt.event.ActionEvent evt) { private void pauseButtonActionPerformed(java.awt.event.ActionEvent evt)
try { {
//System.out.println(mci.getMediaPosition(PositionOrigin.ABSOLUTE, PositionKey.BYTECOUNT)); try
jvlc.playlist.togglePause(); {
} catch (Exception e) { playlist.togglePause();
}
catch (Exception e)
{
e.printStackTrace(); e.printStackTrace();
} }
} }
private void setButtonActionPerformed(java.awt.event.ActionEvent evt) { private void setButtonActionPerformed(java.awt.event.ActionEvent evt)
try { {
jvlc.playlist.add("file://a.avi", "a.avi"); try
jvlc.playlist.play(-1, null); {
} catch (VLCException e) { jvlc.setVideoOutput(jvcanvas);
// TODO Auto-generated catch block playlist.add(jTextField1.getText(), "a.avi");
e.printStackTrace(); playlist.play();
} }
catch (VLCException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
} }
private void fullScreenButtonActionPerformed(java.awt.event.ActionEvent evt) { private void fullScreenButtonActionPerformed(java.awt.event.ActionEvent evt)
//jvlc.fullScreen(); {
// jvlc.fullScreen();
} }
private javax.swing.JButton setButton; private javax.swing.JButton setButton;
private javax.swing.JButton pauseButton; private javax.swing.JButton pauseButton;
private javax.swing.JButton stopButton; private javax.swing.JButton stopButton;
private javax.swing.JButton fullScreenButton; private javax.swing.JButton fullScreenButton;
private javax.swing.JTextField jTextField1; private javax.swing.JTextField jTextField1;
private JVLCPanel jvcc;
private JPanel jvcc;
public JVLC jvlc; public JVLC jvlc;
//MediaControlInstance mci; // MediaControlInstance mci;
} }
public class VlcClient { public class VlcClient
{
public static void main(String[] args)
{
Frame f = new VLCPlayerFrame();
f.setBounds(0, 0, 500, 500);
f.addWindowListener(new WindowAdapter()
{
public static void main(String[] args) { @Override
Frame f = new VLCPlayerFrame(); public void windowClosing(WindowEvent ev)
f.setBounds(0, 0, 500, 500); {
f.addWindowListener( new WindowAdapter() { System.exit(0);
public void windowClosing(WindowEvent ev) { }
System.exit(0); });
} f.setVisible(true);
} );
f.setVisible(true);
} }
} }
package org.videolan.jvlc;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import org.videolan.jvlc.listener.VolumeListener;
public class Audio implements AudioIntf {
private long libvlcInstance;
private native int _getTrack();
private native void _setTrack(int track);
private native int _getChannel();
private native void _setChannel(int channel);
private native boolean _getMute();
private native void _setMute(boolean value);
private native void _toggleMute();
private native int _getVolume();
private native void _setVolume(int volume);
private native void _install_callback();
private static Map objListeners = new HashMap();
public Audio(long instance) {
this.libvlcInstance = instance;
install_callaback();
}
private void install_callaback() {
objListeners.put(this, new HashSet());
_install_callback();
}
public int getTrack() throws VLCException {
return _getTrack();
}
public void setTrack(int track) throws VLCException {
_setTrack(track);
}
public int getChannel() throws VLCException {
return _getChannel();
}
public void setChannel(int channel) throws VLCException {
_setChannel(channel);
}
public boolean getMute() throws VLCException {
return _getMute();
}
public void setMute(boolean value) throws VLCException {
_setMute(value);
}
public void toggleMute() throws VLCException {
_toggleMute();
}
public int getVolume() throws VLCException {
return _getVolume();
}
public void setVolume(int volume) throws VLCException {
_setVolume(volume);
}
public boolean addVolumeListener(VolumeListener listener) {
HashSet listeners = (HashSet) objListeners.get(this);
return listeners.add(listener);
}
public boolean removeVolumeListener(VolumeListener listener) {
HashSet listeners = (HashSet) objListeners.get(this);
return listeners.remove(listener);
}
// this method is invoked natively
private static void wakeupListeners() {
Set audioObjects = objListeners.keySet();
Iterator audioObjectsIterator = audioObjects.iterator();
while (audioObjectsIterator.hasNext()) {
Audio audioObject = (Audio) audioObjectsIterator.next();
HashSet listeners = (HashSet) objListeners.get(audioObject);
Iterator listenerIterator = listeners.iterator();
while (listenerIterator.hasNext()) {
VolumeListener listener = (VolumeListener) listenerIterator.next();
listener.volumeChanged();
}
}
}
public long getInstance() {
return libvlcInstance;
}
}
/*****************************************************************************
* AudioIntf.java: Audio methods interface
*****************************************************************************
*
* Copyright (C) 1998-2006 the VideoLAN team
*
* Author: Filippo Carone <filippo@carone.org>
*
* Created on 28-feb-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;
public interface AudioIntf {
/**
* Constant for left channel audio
*/
final int LEFT_CHANNEL = 3;
/**
* Constant for right channel audio
*/
final int RIGHT_CHANNEL = 4;
/**
* Constant for reverse channel audio
*/
final int REVERSE_CHANNEL = 2;
/**
* Constant for stereo channel audio
*/
final int STEREO_CHANNEL = 1;
/**
* Constant for dolby channel audio
*/
final int DOLBY_CHANNEL = 5;
/**
* @return audio track
* @throws VLCException
*/
int getTrack() throws VLCException;
/**
* @param audio track
* @throws VLCException
*/
void setTrack(int track) throws VLCException;
/**
* @return channel
* @throws VLCException
*/
int getChannel() throws VLCException;
/**
* @param channel
* @throws VLCException
*/
void setChannel(int channel) throws VLCException;
/**
* @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;
}
/*****************************************************************************
* SWTVideoWidget.java: A component usable in SWT Application, embeds JVLC
*****************************************************************************
*
* Copyright (C) 1998-2006 the VideoLAN team
*
* Author: Kuldipsingh Pabla <Kuldipsingh.Pabla@sun.com>
*
* Created on 10-jun-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.awt.Frame;
import java.awt.Component;
public class GenericVideoWidget {
/*
* This class implements a Composite container for VLC Video Output
*/
/*
* The root SWT Frame we embed JVLCCanvas in
*/
public Frame rootFrame;
private JVLCCanvas jvlcCanvas;
public GenericVideoWidget( Component parent ) {
// allocate the new AWT Frame to embed in the Composite
rootFrame = new Frame ();
// add the JVLCCanvas to the Frame
jvlcCanvas = new JVLCCanvas();
rootFrame.add( jvlcCanvas );
}
public JVLC getJVLC() {
return jvlcCanvas.getJVLC();
}
}
package org.videolan.jvlc;
public class Input implements InputIntf {
private long libvlcInstance;
/*
* Input native methods
*/
private native long _getLength();
private native float _getPosition();
private native long _getTime();
private native float _getFPS();
private native void _setTime(long value);
private native void _setPosition(float value);
private native boolean _isPlaying();
private native boolean _hasVout() throws VLCException;
public Input( long instance ) {
this.libvlcInstance = instance;
}
public long getLength() throws VLCException {
return _getLength();
}
public long getTime() throws VLCException {
return _getTime();
}
public float getPosition() throws VLCException {
return _getPosition();
}
public void setTime(long time) throws VLCException {
_setTime(time);
}
public void setPosition(float position) throws VLCException {
_setPosition(position);
}
public double getFPS() throws VLCException {
return _getFPS();
}
public boolean isPlaying() throws VLCException {
return _isPlaying();
}
public boolean hasVout() throws VLCException {
return _hasVout();
}
public long getInstance() {
return libvlcInstance;
}
}
/*****************************************************************************
* InputIntf.java: Input interface
*****************************************************************************
*
* Copyright (C) 1998-2006 the VideoLAN team
*
* Author: Filippo Carone <filippo@carone.org>
*
* Created on 28-feb-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;
/**
* @author little
*
*/
public interface InputIntf {
/**
* @return The total length of the current file playing in millis.
* @throws VLCException
*/
long getLength() throws VLCException;
/**
* @return The current position in millis within the playing item.
* @throws VLCException
*/
long getTime() throws VLCException;
/**
* @return The position in %.
* @throws VLCException
*/
float getPosition() throws VLCException;
/**
* Moves current input to position specified in a float [0-1].
* @param value The position, from 0 to 1, to move the input to.
* @throws VLCException
*/
void setPosition( float value ) throws VLCException;
/**
* Moves current input to time specified in value
* @param value The time in milliseconds to move the input to.
* @throws VLCException
*/
void setTime(long value) throws VLCException;
/**
* @return If the playing item is a video file, returns the FPS, otherwise 0.
* @throws VLCException
*/
double getFPS() throws VLCException;
/**
* @return True if the current input is really playing
*/
boolean isPlaying() throws VLCException;
/**
* @return True if the current input has spawned a video output window
*/
boolean hasVout() throws VLCException;
}
/*****************************************************************************
* JLibVLC.java: Main library interface
*****************************************************************************
*
* Copyright (C) 1998-2006 the VideoLAN team
*
* Author: Filippo Carone <filippo@carone.org>
*
* Created on 28-feb-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;
public interface JLibVLC extends AudioIntf, VideoIntf, InputIntf, VLMIntf { }
...@@ -2,14 +2,14 @@ ...@@ -2,14 +2,14 @@
* JVLC.java: Main Java Class, represents a libvlc_instance_t object * JVLC.java: Main Java Class, represents a libvlc_instance_t object
***************************************************************************** *****************************************************************************
* *
* Copyright (C) 1998-2006 the VideoLAN team * Copyright (C) 1998-2008 the VideoLAN team
* *
* Author: Filippo Carone <filippo@carone.org> * Author: Filippo Carone <filippo@carone.org>
* Philippe Morin <phmorin@free.fr> * Philippe Morin <phmorin@free.fr>
* *
* Created on 28-feb-2006 * Created on 28-feb-2006
* *
* $Id$ * $Id: JVLC.java 20141 2007-05-16 19:31:35Z littlejohn $
* *
* This program is free software; you can redistribute it * This program is free software; you can redistribute it
* and/or modify it under the terms of the GNU General Public License * and/or modify it under the terms of the GNU General Public License
...@@ -27,147 +27,90 @@ ...@@ -27,147 +27,90 @@
* *
*/ */
package org.videolan.jvlc; package org.videolan.jvlc;
public class JVLC implements Runnable { import org.videolan.jvlc.internal.LibVlc;
import org.videolan.jvlc.internal.LibVlc.LibVlcInstance;
static { import org.videolan.jvlc.internal.LibVlc.libvlc_exception_t;
System.loadLibrary("jvlc" );
}
/**
* These are set as final since they live along the jvlc object
*/
private final long _instance;
public final Playlist playlist;
public final Video video;
public final Audio audio;
public final Input input;
public final VLM vlm;
private boolean beingDestroyed = false;
/** import com.sun.jna.Native;
* This is the time in millis VLC checks for internal status
*/ import java.awt.Canvas;
private long resolution = 50;
public class JVLC
private boolean inputPlaying = false; {
private boolean inputVout = false;
private final LibVlcInstance instance;
private final LibVlc libvlc = LibVlc.SYNC_INSTANCE;
public JVLC() { public JVLC()
{
String[] args = new String[1]; String[] args = new String[1];
args[0] = "jvlc"; args[0] = "jvlc";
instance = createInstance(args);
_instance = createInstance( args );
playlist = new Playlist ( _instance );
video = new Video ( _instance );
audio = new Audio ( _instance );
input = new Input ( _instance );
vlm = new VLM ( _instance );
new Thread(this).start();
} }
public JVLC(String[] args) { public JVLC(String[] args)
String[] myargs = new String[args.length + 1]; {
myargs[0] = "jvlc"; String[] myargs = new String[args.length + 1];
System.arraycopy( args, 0, myargs, 1, args.length ); myargs[0] = "jvlc";
_instance = createInstance( myargs ); System.arraycopy(args, 0, myargs, 1, args.length);
playlist = new Playlist ( _instance ); instance = createInstance(myargs);
video = new Video ( _instance );
audio = new Audio ( _instance );
input = new Input ( _instance );
vlm = new VLM ( _instance );
new Thread(this).start();
}
/**
* Destroys the current instance of jvlc, cleaning up objects.
* This is unreversible.
*/
public void destroy() {
if (!beingDestroyed)
{
beingDestroyed = true;
_destroy();
}
} }
/* public MediaInstance play(String media)
* Core methods {
*/ MediaDescriptor mediaDescriptor = new MediaDescriptor(this, media);
private native long createInstance( String[] args ); MediaInstance mediaInstance = new MediaInstance(mediaDescriptor);
private native void _destroy(); mediaInstance.play();
return mediaInstance;
}
public long getInstance() throws VLCException { public void setVideoOutput(Canvas canvas)
return _instance; {
long drawable = Native.getComponentID(canvas);
libvlc_exception_t exception = new libvlc_exception_t();
libvlc.libvlc_video_set_parent(instance, drawable, exception );
} }
/* /*
* Getters and setters * Core methods
*/ */
public Playlist getPlaylist() throws VLCException { private LibVlcInstance createInstance(String[] args)
return playlist; {
} libvlc_exception_t exception = new libvlc_exception_t();
libvlc.libvlc_exception_init(exception);
/** return libvlc.libvlc_new(args.length, args, exception);
* Checks if the input is playing. }
* @return True if there is a playing input.
*/
public boolean isInputPlaying() {
return inputPlaying;
}
/**
* Checks if the input has spawned a video window.
* @return True if there is a video window.
*/
public boolean hasVout() {
return inputVout;
}
/* /**
* (non-Javadoc) * Returns the _instance.
* @see java.lang.Runnable#run() * @return the _instance
* */
* In this thread we check the playlist and input status. LibVlcInstance getInstance()
*/ {
public void run() { return instance;
try { }
while (!beingDestroyed) {
try {
while (playlist.isRunning()) {
inputPlaying = input.isPlaying();
inputVout = input.hasVout();
Thread.sleep(resolution);
} // while playlist running
} catch (VLCException e) {
// it is non-sense to show the stacktrace here
// e.printStackTrace();
}
inputPlaying = false;
inputVout = false;
Thread.sleep(resolution);
} // while ! being destroyed
} catch (InterruptedException e) {
e.printStackTrace();
}
}
/* (non-Javadoc) /**
* @see java.lang.Object#finalize() * Returns the libvlc.
*/ * @return the libvlc
protected void finalize() throws Throwable { */
destroy(); LibVlc getLibvlc()
super.finalize(); {
} return libvlc;
}
/*
* (non-Javadoc)
* @see java.lang.Object#finalize()
*/
@Override
protected void finalize() throws Throwable
{
libvlc.libvlc_release(instance);
super.finalize();
}
} }
/*****************************************************************************
* JVLCCanvas.java: AWT Canvas containing VLC Video Output
*****************************************************************************
*
* Copyright (C) 1998-2006 the VideoLAN team
*
* Author: Filippo Carone <filippo@carone.org>
*
* Created on 25-nov-2005
*
* $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.awt.Canvas;
import java.awt.Graphics;
public class JVLCCanvas extends Canvas {
/**
* Serial version UID
*/
private static final long serialVersionUID = -1888309778861586426L;
public void paint(Graphics g) {
jvlc.video.paint(g);
}
private final JVLC jvlc;
/**
* Default constructor. The canvas is set a dimension of 200x200
*/
public JVLCCanvas() {
super();
jvlc = new JVLC();
jvlc.video.setActualCanvas(this);
setSize(200, 200);
}
public JVLCCanvas(String[] args) {
super();
jvlc = new JVLC(args);
jvlc.video.setActualCanvas(this);
setSize(200, 200);
}
/**
* @param width The initial canvas width
* @param height The initial canvas height
*/
public JVLCCanvas(int width, int height) {
super();
jvlc = new JVLC();
jvlc.video.setActualCanvas(this);
setSize(width, height);
}
public JVLCCanvas(String[] args, int width, int height) {
super();
jvlc = new JVLC(args);
jvlc.video.setActualCanvas(this);
setSize(width, height);
}
public JVLCCanvas(JVLC jvlc) {
super();
this.jvlc = jvlc;
jvlc.video.setActualCanvas(this);
}
public JVLC getJVLC() {
return jvlc;
}
/* (non-Javadoc)
* @see java.awt.Component#removeNotify()
*/
public void removeNotify() {
super.removeNotify();
jvlc.destroy();
}
}
/*****************************************************************************
* JVLCPanel.java: Java Swing JPanel embedding VLC Video Output
*****************************************************************************
*
* Copyright (C) 1998-2006 the VideoLAN team
*
* Author: Filippo Carone <filippo@carone.org>
*
* Created on 28-nov-2005
*
* $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 javax.swing.JPanel;
public class JVLCPanel extends JPanel {
private final JVLCCanvas jvcc;
/**
* Default constructor. The initial size is 200x200
*/
public JVLCPanel() {
jvcc = new JVLCCanvas();
add(jvcc);
}
/**
* @param args Arguments to initialize JVLC
*/
public JVLCPanel(String[] args)
{
jvcc = new JVLCCanvas(args);
add(jvcc);
}
/**
* @param width The width of the panel
* @param height The height of the panel
*/
public JVLCPanel(int width, int height) {
jvcc = new JVLCCanvas(width, height);
add(jvcc);
}
public JVLC getJVLCObject() {
return jvcc.getJVLC();
}
public void setSize(int width, int height) {
super.setSize(width, height);
jvcc.setSize(width, height);
}
}
/***************************************************************************** /*****************************************************************************
* MediaDescriptor.java: VLC Java Bindings * MediaDescriptor.java: VLC Java Bindings Media Descriptor
***************************************************************************** *****************************************************************************
* Copyright (C) 1998-2007 the VideoLAN team * Copyright (C) 1998-2008 the VideoLAN team
* *
* Authors: Filippo Carone <filippo@carone.org> * Authors: Filippo Carone <filippo@carone.org>
* *
...@@ -25,23 +25,80 @@ ...@@ -25,23 +25,80 @@
package org.videolan.jvlc; package org.videolan.jvlc;
import org.videolan.jvlc.internal.LibVlc;
import org.videolan.jvlc.internal.LibVlc.LibVlcEventManager;
import org.videolan.jvlc.internal.LibVlc.LibVlcMediaDescriptor;
import org.videolan.jvlc.internal.LibVlc.libvlc_exception_t;
public class MediaDescriptor public class MediaDescriptor
{ {
private long mediaDescriptor; private LibVlcMediaDescriptor instance;
private LibVlc libvlc;
private LibVlcEventManager eventManager;
public MediaDescriptor(long mediaDescriptor) /**
* @param jvlc The jvlc instance to create the media descriptor for.
* @param media The media string
*/
public MediaDescriptor(JVLC jvlc, String media)
{ {
this.mediaDescriptor = mediaDescriptor; libvlc_exception_t exception = new libvlc_exception_t();
libvlc = jvlc.getLibvlc();
instance = libvlc.libvlc_media_descriptor_new(jvlc.getInstance(), media, exception);
eventManager = libvlc.libvlc_media_descriptor_event_manager(instance, exception);
} }
MediaDescriptor(JVLC jvlc, LibVlcMediaDescriptor instance)
{
libvlc_exception_t exception = new libvlc_exception_t();
libvlc = jvlc.getLibvlc();
this.instance = instance;
eventManager = libvlc.libvlc_media_descriptor_event_manager(instance, exception);
}
public void addOption(String option)
{
libvlc_exception_t exception = new libvlc_exception_t();
libvlc.libvlc_media_descriptor_add_option(instance, option, exception );
}
public String getMrl()
{
return libvlc.libvlc_media_descriptor_get_mrl(instance);
}
public MediaInstance getMediaInstance()
{
return new MediaInstance(this);
}
/**
* {@inheritDoc}
*/
@Override
protected void finalize() throws Throwable
{
libvlc.libvlc_media_descriptor_release(instance);
super.finalize();
}
/**
* Returns the instance.
* @return the instance
*/
LibVlcMediaDescriptor getInstance()
{
return instance;
}
/** /**
* Returns the mediaDescriptor. * Returns the libvlc.
* @return the mediaDescriptor * @return the libvlc
*/ */
public long getMediaDescriptor() LibVlc getLibvlc()
{ {
return mediaDescriptor; return libvlc;
} }
} }
/***************************************************************************** /*****************************************************************************
* MediaInstance.java: VLC Java Bindings * MediaInstance.java: VLC Java Bindings Media Instance
***************************************************************************** *****************************************************************************
* Copyright (C) 1998-2007 the VideoLAN team * Copyright (C) 1998-2008 the VideoLAN team
* *
* Authors: Filippo Carone <filippo@carone.org> * Authors: Filippo Carone <filippo@carone.org>
* *
...@@ -25,135 +25,172 @@ ...@@ -25,135 +25,172 @@
package org.videolan.jvlc; package org.videolan.jvlc;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
import org.videolan.jvlc.event.MediaInstanceCallback;
import org.videolan.jvlc.event.MediaInstanceListener;
import org.videolan.jvlc.internal.LibVlc;
import org.videolan.jvlc.internal.LibVlcEventType;
import org.videolan.jvlc.internal.LibVlc.LibVlcEventManager;
import org.videolan.jvlc.internal.LibVlc.LibVlcMediaInstance;
import org.videolan.jvlc.internal.LibVlc.libvlc_exception_t;
public class MediaInstance public class MediaInstance
{ {
private long _media_instance;
private final LibVlcMediaInstance instance;
private native long _new_media_instance();
private native long _new_from_media_descriptor(MediaDescriptor mediaDescriptor); private final LibVlc libvlc;
private native void _instance_release(long mediaInstance);
private native void _instance_retain(); private final LibVlcEventManager eventManager;
private native void _set_media_descriptor();
private native MediaDescriptor _get_media_descriptor(); private List<MediaInstanceCallback> callbacks = new ArrayList<MediaInstanceCallback>();
private native EventManager _event_manager();
private native void _play(); private MediaDescriptor mediaDescriptor;
private native void _stop();
private native void _pause(); MediaInstance(JVLC jvlc, LibVlcMediaInstance instance)
private native void _set_drawable();
private native long _get_length();
private native long _get_time();
private native void _set_time(long time);
private native float _get_position();
private native void _set_position(float position);
private native boolean _will_play();
private native float _get_rate();
private native void _set_rate(float rate);
private native void _get_state();
private native boolean _has_vout();
private native float _get_fps();
public MediaInstance()
{
this._media_instance = _new_media_instance();
}
public MediaInstance(MediaDescriptor mediaDescriptor)
{
this._media_instance = _new_from_media_descriptor(mediaDescriptor);
}
public MediaDescriptor getMediaDescriptor()
{ {
return _get_media_descriptor(); libvlc_exception_t exception = new libvlc_exception_t();
this.instance = instance;
libvlc = jvlc.getLibvlc();
eventManager = libvlc.libvlc_media_instance_event_manager(instance, exception);
} }
public void setMediaDescriptor(MediaDescriptor mediaDescriptor) public MediaInstance(MediaDescriptor mediaDescriptor)
{ {
_new_from_media_descriptor(mediaDescriptor); libvlc_exception_t exception = new libvlc_exception_t();
libvlc = mediaDescriptor.getLibvlc();
instance = libvlc.libvlc_media_instance_new_from_media_descriptor(mediaDescriptor.getInstance(), exception);
eventManager = libvlc.libvlc_media_instance_event_manager(instance, exception);
this.mediaDescriptor = mediaDescriptor;
} }
public EventManager getEventManager() public MediaDescriptor getMediaDescriptor()
{ {
return _event_manager(); return mediaDescriptor;
} }
public void play() public void play()
{ {
_play(); libvlc_exception_t exception = new libvlc_exception_t();
libvlc.libvlc_media_instance_play(instance, exception);
} }
public void stop() public void stop()
{ {
_stop(); libvlc_exception_t exception = new libvlc_exception_t();
libvlc.libvlc_media_instance_stop(instance, exception);
} }
public void pause() public void pause()
{ {
_pause(); libvlc_exception_t exception = new libvlc_exception_t();
libvlc.libvlc_media_instance_pause(instance, exception);
} }
public long getLength() public long getLength()
{ {
return _get_length(); libvlc_exception_t exception = new libvlc_exception_t();
return libvlc.libvlc_media_instance_get_length(instance, exception);
} }
public long getTime() public long getTime()
{ {
return _get_time(); libvlc_exception_t exception = new libvlc_exception_t();
return libvlc.libvlc_media_instance_get_time(instance, exception);
} }
public void setTime(long time) public void setTime(long time)
{ {
_set_time(time); libvlc_exception_t exception = new libvlc_exception_t();
libvlc.libvlc_media_instance_set_time(instance, time, exception);
} }
public float getPosition() public float getPosition()
{ {
return _get_position(); libvlc_exception_t exception = new libvlc_exception_t();
return libvlc.libvlc_media_instance_get_position(instance, exception);
} }
public void setPosition(float position) public void setPosition(float position)
{ {
_set_position(position); libvlc_exception_t exception = new libvlc_exception_t();
libvlc.libvlc_media_instance_set_position(instance, position, exception);
} }
public boolean willPlay() public boolean willPlay()
{ {
return _will_play(); libvlc_exception_t exception = new libvlc_exception_t();
return (libvlc.libvlc_media_instance_will_play(instance, exception) == 1);
} }
public float getRate() public float getRate()
{ {
return _get_rate(); libvlc_exception_t exception = new libvlc_exception_t();
return libvlc.libvlc_media_instance_get_rate(instance, exception);
} }
public void setRate(float rate) public void setRate(float rate)
{ {
_set_rate(rate); libvlc_exception_t exception = new libvlc_exception_t();
libvlc.libvlc_media_instance_set_rate(instance, rate, exception);
} }
public boolean hasVideoOutput() public boolean hasVideoOutput()
{ {
return _has_vout(); libvlc_exception_t exception = new libvlc_exception_t();
return (libvlc.libvlc_media_instance_has_vout(instance, exception) == 1);
} }
public float getFPS() public float getFPS()
{ {
return _get_fps(); libvlc_exception_t exception = new libvlc_exception_t();
return libvlc.libvlc_media_instance_get_fps(instance, exception);
} }
public void addListener(final MediaInstanceListener listener)
{
MediaInstanceCallback callback = new MediaInstanceCallback(this, listener);
libvlc_exception_t exception = new libvlc_exception_t();
for (LibVlcEventType event : EnumSet.range(
LibVlcEventType.libvlc_MediaInstancePlayed,
LibVlcEventType.libvlc_MediaInstanceTimeChanged))
{
libvlc.libvlc_event_attach(eventManager, event.ordinal(), callback, null, exception);
}
callbacks.add(callback);
}
/** /**
* {@inheritDoc} * {@inheritDoc}
*/ */
@Override @Override
protected void finalize() throws Throwable protected void finalize() throws Throwable
{ {
libvlc_exception_t exception = new libvlc_exception_t();
for (MediaInstanceCallback callback : callbacks)
{
for (LibVlcEventType event : EnumSet.range(
LibVlcEventType.libvlc_MediaInstancePlayed,
LibVlcEventType.libvlc_MediaInstancePositionChanged))
{
libvlc.libvlc_event_detach(eventManager, event.ordinal(), callback, null, exception);
}
}
libvlc.libvlc_media_instance_release(instance);
super.finalize(); super.finalize();
_instance_release(_media_instance);
} }
/**
* Returns the instance.
* @return the instance
*/
LibVlcMediaInstance getInstance()
{
return instance;
}
} }
/*****************************************************************************
* MediaList.java: VLC Java Bindings, MediaList
*****************************************************************************
* Copyright (C) 1998-2008 the VideoLAN team
*
* Authors: Filippo Carone <filippo@carone.org>
*
*
* $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., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/
package org.videolan.jvlc;
import org.videolan.jvlc.internal.LibVlc.LibVlcEventManager;
import org.videolan.jvlc.internal.LibVlc.LibVlcMediaDescriptor;
import org.videolan.jvlc.internal.LibVlc.LibVlcMediaList;
import org.videolan.jvlc.internal.LibVlc.libvlc_exception_t;
public class MediaList
{
private final JVLC jvlc;
private final LibVlcMediaList instance;
private final LibVlcEventManager eventManager;
public MediaList(JVLC jvlc)
{
this.jvlc = jvlc;
libvlc_exception_t exception = new libvlc_exception_t();
instance = jvlc.getLibvlc().libvlc_media_list_new(jvlc.getInstance(), exception);
eventManager = jvlc.getLibvlc().libvlc_media_list_event_manager(instance, exception);
}
public void addMedia(String media)
{
MediaDescriptor descriptor = new MediaDescriptor(jvlc, media);
addMediaDescriptor(descriptor);
}
public void addMediaDescriptor(MediaDescriptor descriptor)
{
libvlc_exception_t exception = new libvlc_exception_t();
jvlc.getLibvlc().libvlc_media_list_add_media_descriptor(instance, descriptor.getInstance(), exception);
}
public int itemsCount()
{
libvlc_exception_t exception = new libvlc_exception_t();
return jvlc.getLibvlc().libvlc_media_list_count(instance, exception);
}
public int indexOf(MediaDescriptor descriptor)
{
libvlc_exception_t exception = new libvlc_exception_t();
return jvlc.getLibvlc().libvlc_media_list_index_of_item(instance, descriptor.getInstance(), exception);
}
public MediaDescriptor getMediaDescriptorAtIndex(int index)
{
libvlc_exception_t exception = new libvlc_exception_t();
LibVlcMediaDescriptor descriptor = jvlc.getLibvlc().libvlc_media_list_item_at_index(instance, index, exception);
return new MediaDescriptor(jvlc, descriptor);
}
public void remove(int index)
{
libvlc_exception_t exception = new libvlc_exception_t();
jvlc.getLibvlc().libvlc_media_list_remove_index(instance, index, exception);
}
public void insertMediaDescriptor(MediaDescriptor descriptor, int index)
{
libvlc_exception_t exception = new libvlc_exception_t();
jvlc
.getLibvlc()
.libvlc_media_list_insert_media_descriptor(instance, descriptor.getInstance(), index, exception);
}
/**
* {@inheritDoc}
*/
@Override
protected void finalize() throws Throwable
{
jvlc.getLibvlc().libvlc_media_list_release(instance);
super.finalize();
}
/**
* Returns the instance.
* @return the instance
*/
LibVlcMediaList getInstance()
{
return instance;
}
}
/*****************************************************************************
* MediaListPlayer.java: VLC Java Bindings, MediaList player
*****************************************************************************
* Copyright (C) 1998-2008 the VideoLAN team
*
* Authors: Filippo Carone <filippo@carone.org>
*
*
* $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., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/
package org.videolan.jvlc;
import org.videolan.jvlc.internal.LibVlc.LibVlcMediaListPlayer;
import org.videolan.jvlc.internal.LibVlc.libvlc_exception_t;
public class MediaListPlayer
{
private final LibVlcMediaListPlayer instance;
private final JVLC jvlc;
public MediaListPlayer(JVLC jvlc)
{
libvlc_exception_t exception = new libvlc_exception_t();
this.jvlc = jvlc;
instance = jvlc.getLibvlc().libvlc_media_list_player_new(jvlc.getInstance(), exception);
}
public void setMediaList(MediaList list)
{
libvlc_exception_t exception = new libvlc_exception_t();
jvlc.getLibvlc().libvlc_media_list_player_set_media_list(instance, list.getInstance(), exception);
}
public boolean isPlaying()
{
libvlc_exception_t exception = new libvlc_exception_t();
return jvlc.getLibvlc().libvlc_media_list_player_is_playing(instance, exception) == 1;
}
public void play()
{
libvlc_exception_t exception = new libvlc_exception_t();
jvlc.getLibvlc().libvlc_media_list_player_play(instance, exception);
}
public void stop()
{
libvlc_exception_t exception = new libvlc_exception_t();
jvlc.getLibvlc().libvlc_media_list_player_stop(instance, exception);
}
public void pause()
{
libvlc_exception_t exception = new libvlc_exception_t();
jvlc.getLibvlc().libvlc_media_list_player_pause(instance, exception);
}
public void playItem(MediaDescriptor descriptor)
{
libvlc_exception_t exception = new libvlc_exception_t();
jvlc.getLibvlc().libvlc_media_list_player_play_item(instance, descriptor.getInstance(), exception);
}
public void playItem(int index)
{
libvlc_exception_t exception = new libvlc_exception_t();
jvlc.getLibvlc().libvlc_media_list_player_play_item_at_index(instance, index, exception);
}
public void setMediaInstance(MediaInstance mediaInstance)
{
libvlc_exception_t exception = new libvlc_exception_t();
jvlc.getLibvlc().libvlc_media_list_player_set_media_instance(instance, mediaInstance.getInstance(), exception);
}
/**
* {@inheritDoc}
*/
@Override
protected void finalize() throws Throwable
{
jvlc.getLibvlc().libvlc_media_list_player_release(instance);
super.finalize();
}
}
...@@ -2,13 +2,13 @@ ...@@ -2,13 +2,13 @@
* Playlist.java: PlaylistIntf implementation class * Playlist.java: PlaylistIntf implementation class
***************************************************************************** *****************************************************************************
* *
* Copyright (C) 1998-2006 the VideoLAN team * Copyright (C) 1998-2008 the VideoLAN team
* *
* Author: Filippo Carone <filippo@carone.org> * Author: Filippo Carone <filippo@carone.org>
* *
* Created on 28-feb-2006 * Created on 28-feb-2006
* *
* $Id$ * $Id: Playlist.java 17089 2006-10-15 10:54:15Z littlejohn $
* *
* This program is free software; you can redistribute it * This program is free software; you can redistribute it
* and/or modify it under the terms of the GNU General Public License * and/or modify it under the terms of the GNU General Public License
...@@ -29,101 +29,94 @@ ...@@ -29,101 +29,94 @@
package org.videolan.jvlc; package org.videolan.jvlc;
public class Playlist implements PlaylistIntf { import org.videolan.jvlc.internal.LibVlc;
import org.videolan.jvlc.internal.LibVlc.LibVlcInstance;
import org.videolan.jvlc.internal.LibVlc.LibVlcMediaInstance;
import org.videolan.jvlc.internal.LibVlc.libvlc_exception_t;
public class Playlist {
private long libvlcInstance; private final LibVlcInstance libvlcInstance;
private final LibVlc libvlc;
private final JVLC jvlc;
public Playlist(long _libvlcInstance) { public Playlist(JVLC jvlc) {
this.libvlcInstance = _libvlcInstance; this.jvlc = jvlc;
this.libvlcInstance = jvlc.getInstance();
this.libvlc = jvlc.getLibvlc();
} }
native private int _playlist_add(String uri, String name, String[] options);
native private void _play(int _id, String[] options);
native private void _pause();
native private void _stop();
native private void _next();
native private void _prev();
native private void _clear();
native private void _deleteItem(int itemID);
native private int _itemsCount();
native private int _isRunning();
native private void _setLoop(boolean loop);
public synchronized void play(int id, String[] options) throws VLCException { public synchronized void play(int id, String[] options) throws VLCException {
_play(id, options); libvlc_exception_t exception = new libvlc_exception_t();
libvlc.libvlc_playlist_play(libvlcInstance, id, options.length, options, exception);
} }
public synchronized void play() throws VLCException { public synchronized void play() throws VLCException {
play(-1, null); libvlc_exception_t exception = new libvlc_exception_t();
libvlc.libvlc_playlist_play(libvlcInstance, -1, 0, new String[] {}, exception);
} }
public synchronized void togglePause() throws VLCException { public synchronized void togglePause() throws VLCException {
_pause(); libvlc_exception_t exception = new libvlc_exception_t();
libvlc.libvlc_playlist_pause(libvlcInstance, exception);
} }
public synchronized void stop() throws VLCException { public synchronized void stop() throws VLCException {
_stop(); libvlc_exception_t exception = new libvlc_exception_t();
// do { libvlc.libvlc_playlist_stop(libvlcInstance, exception);
// try {
// Thread.sleep(50);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
// } while (isRunning());
} }
public boolean isRunning() throws VLCException { public boolean isRunning() throws VLCException {
return (_isRunning() == 0)? false : true ; libvlc_exception_t exception = new libvlc_exception_t();
return libvlc.libvlc_playlist_isplaying(libvlcInstance, exception) == 0? false : true;
} }
public synchronized int itemsCount() throws VLCException { public synchronized int itemsCount() throws VLCException {
return _itemsCount(); libvlc_exception_t exception = new libvlc_exception_t();
return libvlc.libvlc_playlist_items_count(libvlcInstance, exception);
} }
public synchronized void next() throws VLCException { public synchronized void next() throws VLCException {
libvlc_exception_t exception = new libvlc_exception_t();
if (! isRunning()) if (! isRunning())
play(); play();
_next(); libvlc.libvlc_playlist_next(libvlcInstance, exception);
} }
public synchronized void prev() throws VLCException { public synchronized void prev() throws VLCException {
libvlc_exception_t exception = new libvlc_exception_t();
if (! isRunning()) if (! isRunning())
play(); play();
_prev(); libvlc.libvlc_playlist_prev(libvlcInstance, exception);
} }
public synchronized void clear() throws VLCException { public synchronized void clear() throws VLCException {
_clear(); libvlc_exception_t exception = new libvlc_exception_t();
} libvlc.libvlc_playlist_clear(libvlcInstance, exception);
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) throws VLCException { public synchronized int add(String uri, String name) throws VLCException {
return add(uri, name, null); libvlc_exception_t exception = new libvlc_exception_t();
return libvlc.libvlc_playlist_add(libvlcInstance, uri, name, exception);
} }
public synchronized void addExtended() {
}
public synchronized void deleteItem(int itemID) throws VLCException { public synchronized void deleteItem(int itemID) throws VLCException {
_deleteItem(itemID); libvlc_exception_t exception = new libvlc_exception_t();
libvlc.libvlc_playlist_delete_item(libvlcInstance, itemID, exception);
} }
public synchronized void setLoop(boolean loop) { public synchronized void setLoop(boolean loop) {
_setLoop(loop); libvlc_exception_t exception = new libvlc_exception_t();
libvlc.libvlc_playlist_loop(libvlcInstance, loop? 1 : 0, exception);
} }
public long getInstance() throws VLCException { public MediaInstance getMediaInstance()
return libvlcInstance; {
libvlc_exception_t exception = new libvlc_exception_t();
LibVlcMediaInstance mi = libvlc.libvlc_playlist_get_media_instance(libvlcInstance, exception);
return new MediaInstance(jvlc, mi);
} }
public void setPause(boolean pause) throws VLCException {
// TODO Auto-generated method stub
}
} }
/*****************************************************************************
* PlaylistIntf.java: The playlist interface
*****************************************************************************
*
* Copyright (C) 1998-2006 the VideoLAN team
*
* Author: Filippo Carone <filippo@carone.org>
*
* Created on 28-feb-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;
public interface PlaylistIntf {
/**
* Plays the item specified in id, with options. At the moment options
* has no effect and can be safely set to null.
* @param id The ID to play
* @param options Options to play the item with
*/
void play(int id, String[] options) throws VLCException;
/**
* Plays the current item in the playlist.
*/
void play() throws VLCException;
/**
* Toggles pause for the current item.
*/
void togglePause() throws VLCException;
/**
* Pauses the currently playing item if pause value is true. Plays it
* otherwise. If you set pause to true and the current item is already
* playing, this has no effect.
*
* @param pause
* @throws VLCException
*/
void setPause(boolean pause) throws VLCException;
/**
* Stops the currently playing item. Differently from pause, stopping
* an item destroys any information related to the item.
*/
void stop() throws VLCException;
/**
* This function returns true if the current item has not been stopped.
* @return True if the current item has not been stopped
*/
boolean isRunning() throws VLCException;
/**
* TODO: this should return the number of items added with add, with no
* respect to videolan internal playlist.
*
* Returns the number of items in the playlist. Beware that this number
* could be bigger than the number of times add() has been called.
*
* @return Current number of items in the playlist
*/
int itemsCount() throws VLCException;
/**
* Move to next item in the playlist and play it.
*/
void next() throws VLCException;
/**
* Move to previous item in the playlist and play it.
*/
void prev() throws VLCException;
/**
* Clear the playlist which becomes empty after this call.
*/
void clear() throws VLCException;
/**
* TODO: document the kind of items that can be added.
* 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();
/**
* @param loop
*/
void setLoop(boolean loop);
}
package org.videolan.jvlc;
public class VLM implements VLMIntf {
private long libvlcInstance;
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);
private native void _playMedia(String mediaName);
private native void _stopMedia(String mediaName);
private native void _pauseMedia(String mediaName);
private native void _seekMedia(String mediaName, float percentage);
private native String _showMedia(String mediaName);
private native float _getMediaposition(String name, int mediaInstance);
private native int _getMediatime(String name, int mediaInstance);
private native int _getMedialength(String name, int mediaInstance);
private native int _getMediarate(String name, int mediaInstance);
private native int _getMediatitle(String name, int mediaInstance);
private native int _getMediachapter(String name, int mediaInstance);
private native int _getMediaseekable(String name, int mediaInstance);
public VLM( long instance ) {
this.libvlcInstance = instance;
}
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);
}
public void playMedia(String name) throws VLCException {
_playMedia(name);
}
public void stopMedia(String name) throws VLCException {
_stopMedia(name);
}
public void pauseMedia(String name) throws VLCException {
_pauseMedia(name);
}
public void seekMedia(String name, float percentage) throws VLCException {
_seekMedia(name, percentage);
}
public String showMedia(String name) throws VLCException {
return _showMedia(name);
}
public float getMediaPosition(String name, int mediaInstance) throws VLCException {
return _getMediaposition(name, mediaInstance);
}
public int getMediaTime(String name, int mediaInstance) throws VLCException {
return _getMediatime(name, mediaInstance);
}
public int getMediaLength(String name, int mediaInstance) throws VLCException {
return _getMedialength(name, mediaInstance);
}
public int getMediaRate(String name, int mediaInstance) throws VLCException {
return _getMediarate(name, mediaInstance);
}
public int getMediaTitle(String name, int mediaInstance) throws VLCException {
return _getMediatitle(name, mediaInstance);
}
public int getMediaChapter(String name, int mediaInstance) throws VLCException {
return _getMediachapter(name, mediaInstance);
}
public boolean getMediaSeekable(String name, int mediaInstance) throws VLCException {
return _getMediaseekable(name, mediaInstance) > 0;
}
public long getInstance() {
return libvlcInstance;
}
}
/*****************************************************************************
* VLMIntf.java: VLM Interface
*****************************************************************************
*
* Copyright (C) 1998-2006 the VideoLAN team
*
* Author: Filippo Carone <filippo@carone.org>
*
* Created on 28-feb-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;
public interface VLMIntf {
/**
* Add a broadcast, with one input
* @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 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 loop mode 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;
/**
* Plays a media
* @param name of the broadcast to play
*/
void playMedia(String name) throws VLCException;
/**
* Stops a media
* @param name of the broadcast to stop
*/
void stopMedia(String name) throws VLCException;
/**
* Pauses a media
* @param name name of the broadcast to pause
*/
void pauseMedia(String name) throws VLCException;
}
/** /*****************************************************************************
* Video.java: JVLC Video Output
*****************************************************************************
*
* Copyright (C) 1998-2008 the VideoLAN team
*
* Author: Filippo Carone <filippo@carone.org>
* Philippe Morin <phmorin@free.fr>
*
* Created on 28-feb-2006
*
* $Id: JVLC.java 20141 2007-05-16 19:31:35Z 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 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; package org.videolan.jvlc;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.Graphics;
public final class Video implements VideoIntf { import org.videolan.jvlc.internal.LibVlc;
import org.videolan.jvlc.internal.LibVlc.LibVlcInstance;
import org.videolan.jvlc.internal.LibVlc.libvlc_exception_t;
public class Video
{
private long libvlcInstance; private final LibVlcInstance libvlcInstance;
private JVLCCanvas actualCanvas; private final LibVlc libvlc;
public Video( long libvlcInstance) { public Video( JVLC jvlc) {
this.libvlcInstance = libvlcInstance; this.libvlcInstance = jvlc.getInstance();
this.libvlc = jvlc.getLibvlc();
} }
/*
* Video native methods
*/
private native void _toggleFullscreen();
private native void _setFullscreen( boolean value);
private native boolean _getFullscreen();
private native int _getHeight();
private native int _getWidth();
private native void _getSnapshot(String filename,int width,int height);
private native void _destroyVideo();
private native void _reparent(JVLCCanvas component);
private native void _setSize(int width, int height);
private native void _paint(JVLCCanvas canvas, Graphics g);
/* (non-Javadoc) /* (non-Javadoc)
* @see org.videolan.jvlc.VideoIntf#destroyVideo() * @see org.videolan.jvlc.VideoIntf#destroyVideo()
*/ */
public void destroyVideo() throws VLCException { public void destroyVideo(MediaInstance media)
_destroyVideo(); {
libvlc_exception_t exception = new libvlc_exception_t();
libvlc.libvlc_video_destroy(media.getInstance(), exception );
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.videolan.jvlc.VideoIntf#getFullscreen() * @see org.videolan.jvlc.VideoIntf#getFullscreen()
*/ */
public boolean getFullscreen() throws VLCException { public boolean getFullscreen(MediaInstance media) throws VLCException {
return _getFullscreen(); libvlc_exception_t exception = new libvlc_exception_t();
return libvlc.libvlc_get_fullscreen(media.getInstance(), exception) == 1 ? true : false;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.videolan.jvlc.VideoIntf#getSnapshot(java.lang.String) * @see org.videolan.jvlc.VideoIntf#getSnapshot(java.lang.String)
*/ */
public void getSnapshot(String filepath,int width,int height) throws VLCException { public void getSnapshot(MediaInstance media, String filepath, int width, int height) throws VLCException {
_getSnapshot( filepath , width, height); libvlc_exception_t exception = new libvlc_exception_t();
libvlc.libvlc_video_take_snapshot(media.getInstance(), filepath, width, height, exception);
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.videolan.jvlc.VideoIntf#getVideoHeight() * @see org.videolan.jvlc.VideoIntf#getVideoHeight()
*/ */
public int getHeight() throws VLCException { public int getHeight(MediaInstance media) throws VLCException {
return _getHeight(); libvlc_exception_t exception = new libvlc_exception_t();
return libvlc.libvlc_video_get_height(media.getInstance(), exception);
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.videolan.jvlc.VideoIntf#getVideoWidth() * @see org.videolan.jvlc.VideoIntf#getVideoWidth()
*/ */
public int getWidth() throws VLCException { public int getWidth(MediaInstance media) throws VLCException {
return _getWidth(); libvlc_exception_t exception = new libvlc_exception_t();
return libvlc.libvlc_video_get_height(media.getInstance(), exception);
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.videolan.jvlc.VideoIntf#reparentVideo(java.awt.Component) * @see org.videolan.jvlc.VideoIntf#reparentVideo(java.awt.Component)
*/ */
public void reparent(JVLCCanvas c) throws VLCException { public void reparent(MediaInstance media, java.awt.Canvas canvas) throws VLCException {
_reparent(c); libvlc_exception_t exception = new libvlc_exception_t();
setActualCanvas(c); long drawable = com.sun.jna.Native.getComponentID(canvas);
libvlc.libvlc_video_reparent(media.getInstance(), drawable, exception);
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.videolan.jvlc.VideoIntf#resizeVideo(int, int) * @see org.videolan.jvlc.VideoIntf#resizeVideo(int, int)
*/ */
public void setSize(int width, int height) throws VLCException { public void setSize(int width, int height) throws VLCException {
_setSize( width, height ); libvlc_exception_t exception = new libvlc_exception_t();
libvlc.libvlc_video_set_size(libvlcInstance, width, height, exception);
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.videolan.jvlc.VideoIntf#setFullscreen(boolean) * @see org.videolan.jvlc.VideoIntf#setFullscreen(boolean)
*/ */
public void setFullscreen(boolean fullscreen) throws VLCException { public void setFullscreen(MediaInstance media, boolean fullscreen) throws VLCException {
_setFullscreen( fullscreen ); libvlc_exception_t exception = new libvlc_exception_t();
libvlc.libvlc_set_fullscreen(media.getInstance(), fullscreen? 1 : 0, exception);
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.videolan.jvlc.VideoIntf#toggleFullscreen() * @see org.videolan.jvlc.VideoIntf#toggleFullscreen()
*/ */
public void toggleFullscreen() throws VLCException { public void toggleFullscreen(MediaInstance media) throws VLCException {
_toggleFullscreen(); libvlc_exception_t exception = new libvlc_exception_t();
libvlc.libvlc_toggle_fullscreen(media.getInstance(), exception);
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.videolan.jvlc.VideoIntf#getSize() * @see org.videolan.jvlc.VideoIntf#getSize()
*/ */
public Dimension getSize() throws VLCException { public Dimension getSize(MediaInstance media) throws VLCException {
return new Dimension (getWidth(), getHeight()); return new Dimension (getWidth(media), getHeight(media));
} }
/* (non-Javadoc) /* (non-Javadoc)
...@@ -107,17 +134,4 @@ public final class Video implements VideoIntf { ...@@ -107,17 +134,4 @@ public final class Video implements VideoIntf {
public void setSize(Dimension d) throws VLCException { public void setSize(Dimension d) throws VLCException {
setSize(d.width, d.height); setSize(d.width, d.height);
} }
public void paint(Graphics g) {
_paint(actualCanvas, g);
}
public void setActualCanvas(JVLCCanvas canvas) {
actualCanvas = canvas;
}
public long getInstance() {
return libvlcInstance;
}
} }
/*****************************************************************************
* VideoIntf.java: Video methods interface
*****************************************************************************
*
* Copyright (C) 1998-2006 the VideoLAN team
*
* Author: Filippo Carone <filippo@carone.org>
*
* Created on 28-feb-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.awt.Dimension;
public interface VideoIntf {
/**
* Toggles the fullscreen.
*/
void toggleFullscreen() throws VLCException;
/**
* Sets fullscreen if fullscreen argument is true.
* @param fullscreen
*/
void setFullscreen( boolean fullscreen ) throws VLCException;
/**
* @return True if the current video window is in fullscreen mode.
*/
boolean getFullscreen() throws VLCException;
/**
* Saves a snapshot of the current video window.
* @param filepath The full path (including filename) were to save the snapshot to.
* 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,int width,int height) throws VLCException;
/**
* @return The current video window height
*/
int getHeight() throws VLCException;
/**
* @return The current video window width
*/
int getWidth() throws VLCException;
/**
* Get the size of the video output window as a Dimension object.
* @return The video size in a Dimension object.
* @throws VLCException
*/
Dimension getSize() throws VLCException;
/**
* Destroys video output, but the item continues to play.
* @throws VLCException
*/
void destroyVideo() throws VLCException;
/**
* Moves video output from the current Canvas to another. This funtion
* doens't resize the video output to the new canvas size. See resizeVideo().
* @param c
* @throws VLCException
*/
void reparent(JVLCCanvas c) throws VLCException;
/**
* Resizes video output to width and height. This operation could be necessary
* after reparenting. See reparentVideo().
* @param width The new video output width
* @param height The new video output height
* @throws VLCException
*/
void setSize(int width, int height) throws VLCException;
/**
* Resizes video output to width and height. This operation could be necessary
* after reparenting. See reparentVideo().
*
* @param d The new size of video
* @throws VLCException
*/
void setSize(Dimension d) throws VLCException;
}
/***************************************************************************** /*****************************************************************************
* callback-jni.cc: JNI native callback functions for VLC Java Bindings * MediaInstancePlayCallback.java: VLC Java Bindings
***************************************************************************** *****************************************************************************
* Copyright (C) 1998-2006 the VideoLAN team * Copyright (C) 1998-2008 the VideoLAN team
* *
* Authors: Filippo Carone <filippo@carone.org> * Authors: Filippo Carone <filippo@carone.org>
* *
...@@ -23,46 +23,61 @@ ...@@ -23,46 +23,61 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/ *****************************************************************************/
/* These are a must*/ package org.videolan.jvlc.event;
#include <jni.h>
#include <vlc/libvlc.h>
#ifdef WIN32
#include <windows.h>
#undef usleep
#define usleep(var) Sleep(var/1000)
#else
#include <unistd.h>
#endif
#include <stdio.h>
#include "utils.h" import org.videolan.jvlc.MediaInstance;
import org.videolan.jvlc.internal.LibVlc;
import org.videolan.jvlc.internal.LibVlcEventType;
import org.videolan.jvlc.internal.LibVlc.LibVlcCallback;
import org.videolan.jvlc.internal.LibVlc.libvlc_event_t;
import org.videolan.jvlc.internal.LibVlc.media_instance_time_changed;
#include "../includes/Audio.h" import com.sun.jna.Pointer;
static JavaVM *jvm;
static jclass audioClass;
static jmethodID wakeupListenersMethod;
void volumeChangedCallback( libvlc_instance_t *p_instance, libvlc_event_t *event, void *user_data ); public class MediaInstanceCallback implements LibVlcCallback
{
private MediaInstanceListener listener;
private MediaInstance mediaInstance;
JNIEXPORT void JNICALL Java_org_videolan_jvlc_Audio__1install_1callback( JNIEnv *env, jobject _this ) public MediaInstanceCallback(MediaInstance mediaInstance, MediaInstanceListener listener)
{
INIT_FUNCTION ;
if (jvm == NULL)
{ {
env->GetJavaVM( &jvm ); this.mediaInstance = mediaInstance;
audioClass = env->GetObjectClass( _this ); this.listener = listener;
wakeupListenersMethod = env->GetStaticMethodID(audioClass, "wakeupListeners", "()V"); }
/**
* {@inheritDoc}
*/
@Override
public void callback(libvlc_event_t libvlc_event, Pointer userData)
{
if (libvlc_event.type == LibVlcEventType.libvlc_MediaInstancePlayed.ordinal())
{
listener.played(mediaInstance);
}
else if (libvlc_event.type == LibVlcEventType.libvlc_MediaInstancePaused.ordinal())
{
listener.paused(mediaInstance);
}
else if (libvlc_event.type == LibVlcEventType.libvlc_MediaInstanceReachedEnd.ordinal())
{
listener.endReached(mediaInstance);
}
else if (libvlc_event.type == LibVlcEventType.libvlc_MediaInstancePositionChanged.ordinal())
{
listener.positionChanged(mediaInstance);
}
else if (libvlc_event.type == LibVlcEventType.libvlc_MediaInstanceTimeChanged.ordinal())
{
libvlc_event.event_type_specific.setType(LibVlc.media_instance_time_changed.class);
LibVlc.media_instance_time_changed timeChanged = (media_instance_time_changed) libvlc_event.event_type_specific
.readField("media_instance_time_changed");
listener.timeChanged(mediaInstance, timeChanged.new_time);
}
else
{
throw new RuntimeException("Unsupported event error. Event id: " + libvlc_event.type);
}
} }
libvlc_exception_raise( &exception, "not implemented" );
CHECK_EXCEPTION ;
}
void volumeChangedCallback( struct libvlc_instance_t *p_instance, libvlc_event_t *event, void *user_data )
{
ATTACH_JVM;
env->CallStaticVoidMethod( audioClass, wakeupListenersMethod);
} }
/***************************************************************************** /*****************************************************************************
* EventManager.java: VLC Java Bindings * MediaInstancePlayListener.java: VLC Java Bindings
***************************************************************************** *****************************************************************************
* Copyright (C) 1998-2007 the VideoLAN team * Copyright (C) 1998-2008 the VideoLAN team
* *
* Authors: Filippo Carone <filippo@carone.org> * Authors: Filippo Carone <filippo@carone.org>
* *
...@@ -23,10 +23,22 @@ ...@@ -23,10 +23,22 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/ *****************************************************************************/
package org.videolan.jvlc; package org.videolan.jvlc.event;
import org.videolan.jvlc.MediaInstance;
public class EventManager
public interface MediaInstanceListener
{ {
void played(MediaInstance mediaInstance);
void paused(MediaInstance mediaInstance);
void endReached(MediaInstance mediaInstance);
void timeChanged(MediaInstance mediaInstance, long newTime);
void positionChanged(MediaInstance mediaInstance);
} }
...@@ -28,15 +28,18 @@ package org.videolan.jvlc.internal; ...@@ -28,15 +28,18 @@ package org.videolan.jvlc.internal;
import com.sun.jna.Callback; import com.sun.jna.Callback;
import com.sun.jna.Library; import com.sun.jna.Library;
import com.sun.jna.Native; import com.sun.jna.Native;
import com.sun.jna.NativeLong;
import com.sun.jna.Pointer; import com.sun.jna.Pointer;
import com.sun.jna.PointerType; import com.sun.jna.PointerType;
import com.sun.jna.Structure; import com.sun.jna.Structure;
import com.sun.jna.Union;
public interface LibVlc extends Library public interface LibVlc extends Library
{ {
LibVlc INSTANCE = (LibVlc) Native.loadLibrary("libvlc-control", LibVlc.class); LibVlc INSTANCE = (LibVlc) Native.loadLibrary("libvlc-control", LibVlc.class);
LibVlc SYNC_INSTANCE = (LibVlc) Native.synchronizedLibrary(INSTANCE);
public static class libvlc_exception_t extends Structure public static class libvlc_exception_t extends Structure
{ {
...@@ -48,6 +51,168 @@ public interface LibVlc extends Library ...@@ -48,6 +51,168 @@ public interface LibVlc extends Library
public String message; public String message;
} }
public static class libvlc_event_t extends Structure
{
public int type;
public Pointer obj;
public event_type_specific event_type_specific;
}
public class media_descriptor_meta_changed extends Structure
{
public Pointer meta_type;
}
public class media_descriptor_subitem_added extends Structure
{
public LibVlcMediaDescriptor new_child;
}
public class media_descriptor_duration_changed extends Structure
{
public NativeLong new_duration;
}
public class media_descriptor_preparsed_changed extends Structure
{
public int new_status;
}
public class media_descriptor_freed extends Structure
{
public LibVlcMediaDescriptor md;
}
public class media_descriptor_state_changed extends Structure
{
// @todo: check this one
public int new_state;
}
/* media instance */
public class media_instance_position_changed extends Structure
{
public float new_position;
}
public class media_instance_time_changed extends Structure
{
// @todo: check this one
public long new_time;
}
/* media list */
public class media_list_item_added extends Structure
{
public LibVlcMediaDescriptor item;
public int index;
}
public class media_list_will_add_item extends Structure
{
public LibVlcMediaDescriptor item;
public int index;
}
public class media_list_item_deleted extends Structure
{
public LibVlcMediaDescriptor item;
public int index;
}
public class media_list_will_delete_item extends Structure
{
public LibVlcMediaDescriptor item;
public int index;
}
/* media list view */
public class media_list_view_item_added extends Structure
{
public LibVlcMediaDescriptor item;
public int index;
}
public class media_list_view_will_add_item extends Structure
{
public LibVlcMediaDescriptor item;
public int index;
}
public class media_list_view_item_deleted extends Structure
{
public LibVlcMediaDescriptor item;
public int index;
}
public class media_list_view_will_delete_item extends Structure
{
public LibVlcMediaDescriptor item;
public int index;
}
/* media discoverer */
public class media_media_discoverer_started extends Structure
{
public Pointer unused;
}
public class media_media_discoverer_ended extends Structure
{
public Pointer unused;
}
public class event_type_specific extends Union
{
public media_descriptor_meta_changed media_descriptor_meta_changed;
public media_descriptor_subitem_added media_descriptor_subitem_added;
public media_descriptor_duration_changed media_descriptor_duration_changed;
public media_descriptor_preparsed_changed media_descriptor_preparsed_changed;
public media_descriptor_freed media_descriptor_freed;
public media_descriptor_state_changed media_descriptor_state_changed;
public media_instance_position_changed media_instance_position_changed;
public media_instance_time_changed media_instance_time_changed;
public media_list_item_added media_list_item_added;
public media_list_will_add_item media_list_will_add_item;
public media_list_item_deleted media_list_item_deleted;
public media_list_will_delete_item media_list_will_delete_item;
public media_list_view_item_added media_list_view_item_added;
public media_list_view_will_add_item media_list_view_will_add_item;
public media_list_view_item_deleted media_list_view_item_deleted;
public media_list_view_will_delete_item media_list_view_will_delete_item;
}
public class LibVlcInstance extends PointerType public class LibVlcInstance extends PointerType
{ {
} }
...@@ -138,34 +303,36 @@ public interface LibVlc extends Library ...@@ -138,34 +303,36 @@ public interface LibVlc extends Library
int libvlc_audio_set_volume(LibVlcInstance instance, int volume, libvlc_exception_t exception); int libvlc_audio_set_volume(LibVlcInstance instance, int volume, libvlc_exception_t exception);
// playlist // playlist
void libvlc_playlist_loop(LibVlcInstance instance, int loop, libvlc_exception_t exception); void libvlc_playlist_loop(LibVlcInstance instance, int loop, libvlc_exception_t exception);
void libvlc_playlist_play(LibVlcInstance instance, int itemIndex, int optionsCount, String[] options, libvlc_exception_t exception); void libvlc_playlist_play(LibVlcInstance instance, int itemIndex, int optionsCount, String[] options,
libvlc_exception_t exception);
void libvlc_playlist_pause(LibVlcInstance instance, libvlc_exception_t exception); void libvlc_playlist_pause(LibVlcInstance instance, libvlc_exception_t exception);
void libvlc_playlist_stop(LibVlcInstance instance, libvlc_exception_t exception); void libvlc_playlist_stop(LibVlcInstance instance, libvlc_exception_t exception);
int libvlc_playlist_isplaying(LibVlcInstance instance, libvlc_exception_t exception); int libvlc_playlist_isplaying(LibVlcInstance instance, libvlc_exception_t exception);
int libvlc_playlist_items_count(LibVlcInstance instance, libvlc_exception_t exception); int libvlc_playlist_items_count(LibVlcInstance instance, libvlc_exception_t exception);
void libvlc_playlist_next(LibVlcInstance instance, libvlc_exception_t exception); void libvlc_playlist_next(LibVlcInstance instance, libvlc_exception_t exception);
void libvlc_playlist_prev(LibVlcInstance instance, libvlc_exception_t exception); void libvlc_playlist_prev(LibVlcInstance instance, libvlc_exception_t exception);
void libvlc_playlist_clear(LibVlcInstance instance, libvlc_exception_t exception); void libvlc_playlist_clear(LibVlcInstance instance, libvlc_exception_t exception);
int libvlc_playlist_add(LibVlcInstance instance, String uri, String name, libvlc_exception_t exception); int libvlc_playlist_add(LibVlcInstance instance, String uri, String name, libvlc_exception_t exception);
int libvlc_playlist_delete_item(LibVlcInstance instance, int itemIndex, libvlc_exception_t exception); int libvlc_playlist_delete_item(LibVlcInstance instance, int itemIndex, libvlc_exception_t exception);
LibVlcMediaInstance libvlc_playlist_get_media_instance(LibVlcInstance instance, libvlc_exception_t exception); LibVlcMediaInstance libvlc_playlist_get_media_instance(LibVlcInstance instance, libvlc_exception_t exception);
int libvlc_media_instance_is_seekable(LibVlcMediaInstance instance, libvlc_exception_t exception); int libvlc_media_instance_is_seekable(LibVlcMediaInstance instance, libvlc_exception_t exception);
int libvlc_media_instance_can_pause(LibVlcMediaInstance instance, libvlc_exception_t exception); int libvlc_media_instance_can_pause(LibVlcMediaInstance instance, libvlc_exception_t exception);
// media descriptor // media descriptor
LibVlcMediaDescriptor libvlc_media_descriptor_new(LibVlcInstance libvlc_instance, String mrl, LibVlcMediaDescriptor libvlc_media_descriptor_new(LibVlcInstance libvlc_instance, String mrl,
...@@ -204,7 +371,7 @@ public interface LibVlc extends Library ...@@ -204,7 +371,7 @@ public interface LibVlc extends Library
void libvlc_media_instance_set_time(LibVlcMediaInstance instance, long time, libvlc_exception_t exception); void libvlc_media_instance_set_time(LibVlcMediaInstance instance, long time, libvlc_exception_t exception);
float libvlc_media_instance_get_position(LibVlcMediaInstance instance, libvlc_exception_t exception); float libvlc_media_instance_get_position(LibVlcMediaInstance instance, libvlc_exception_t exception);
void libvlc_media_instance_set_position(LibVlcMediaInstance instance, float position, libvlc_exception_t exception); void libvlc_media_instance_set_position(LibVlcMediaInstance instance, float position, libvlc_exception_t exception);
int libvlc_media_instance_will_play(LibVlcMediaInstance instance, libvlc_exception_t exception); int libvlc_media_instance_will_play(LibVlcMediaInstance instance, libvlc_exception_t exception);
...@@ -218,7 +385,7 @@ public interface LibVlc extends Library ...@@ -218,7 +385,7 @@ public interface LibVlc extends Library
float libvlc_media_instance_get_fps(LibVlcMediaInstance instance2, libvlc_exception_t exception); float libvlc_media_instance_get_fps(LibVlcMediaInstance instance2, libvlc_exception_t exception);
void libvlc_media_instance_release(LibVlcMediaInstance instance); void libvlc_media_instance_release(LibVlcMediaInstance instance);
LibVlcEventManager libvlc_media_instance_event_manager(LibVlcMediaInstance media_instance, LibVlcEventManager libvlc_media_instance_event_manager(LibVlcMediaInstance media_instance,
libvlc_exception_t exception); libvlc_exception_t exception);
...@@ -293,7 +460,7 @@ public interface LibVlc extends Library ...@@ -293,7 +460,7 @@ public interface LibVlc extends Library
public static interface LibVlcCallback extends Callback public static interface LibVlcCallback extends Callback
{ {
void callback(int libvlc_event_t, Pointer userData); void callback(libvlc_event_t libvlc_event, Pointer userData);
} }
void libvlc_event_attach(LibVlcEventManager event_manager, int event_type, LibVlcCallback callback, void libvlc_event_attach(LibVlcEventManager event_manager, int event_type, LibVlcCallback callback,
......
...@@ -36,5 +36,8 @@ public enum LibVlcEventType { ...@@ -36,5 +36,8 @@ public enum LibVlcEventType {
libvlc_MediaDescriptorStateChanged, libvlc_MediaDescriptorStateChanged,
libvlc_MediaInstancePlayed, libvlc_MediaInstancePlayed,
libvlc_MediaInstancePaused, libvlc_MediaInstancePaused,
libvlc_MediaInstanceReachedEnd; libvlc_MediaInstanceReachedEnd,
libvlc_MediaInstanceEncounteredError,
libvlc_MediaInstanceTimeChanged,
libvlc_MediaInstancePositionChanged;
} }
...@@ -36,6 +36,7 @@ import org.videolan.jvlc.internal.LibVlc.LibVlcEventManager; ...@@ -36,6 +36,7 @@ import org.videolan.jvlc.internal.LibVlc.LibVlcEventManager;
import org.videolan.jvlc.internal.LibVlc.LibVlcInstance; import org.videolan.jvlc.internal.LibVlc.LibVlcInstance;
import org.videolan.jvlc.internal.LibVlc.LibVlcMediaDescriptor; import org.videolan.jvlc.internal.LibVlc.LibVlcMediaDescriptor;
import org.videolan.jvlc.internal.LibVlc.LibVlcMediaInstance; import org.videolan.jvlc.internal.LibVlc.LibVlcMediaInstance;
import org.videolan.jvlc.internal.LibVlc.libvlc_event_t;
import org.videolan.jvlc.internal.LibVlc.libvlc_exception_t; import org.videolan.jvlc.internal.LibVlc.libvlc_exception_t;
import com.sun.jna.Pointer; import com.sun.jna.Pointer;
...@@ -68,7 +69,7 @@ public class LibVlcImpl ...@@ -68,7 +69,7 @@ public class LibVlcImpl
{ {
@Override @Override
public void callback(int libvlc_event_t, Pointer pointer) public void callback(libvlc_event_t libvlc_event_t, Pointer pointer)
{ {
System.out.println("Playing started."); System.out.println("Playing started.");
} }
...@@ -78,7 +79,7 @@ public class LibVlcImpl ...@@ -78,7 +79,7 @@ public class LibVlcImpl
{ {
@Override @Override
public void callback(int libvlc_event_t, Pointer pointer) public void callback(libvlc_event_t libvlc_event_t, Pointer pointer)
{ {
synchronized (lock) synchronized (lock)
{ {
......
package org.videolan.jvlc.listener;
public interface VolumeListener {
void volumeChanged();
}
libjvlc_la_SOURCES = \
audio-jni.cc \
core-jni.cc \
graphics-jni.cc \
input-jni.cc \
playlist-jni.cc \
utils.cc \
utils.h \
video-jni.cc \
vlm-jni.cc \
callback-jni.cc
libjvlc_la_CPPFLAGS = `$(VLC_CONFIG) --cflags pic` $(JINCLUDES)
libjvlc_la_LIBADD = ../../../src/libvlc-control.la $(LIBJINCLUDES)
if BUILD_JAVA
lib_LTLIBRARIES = libjvlc.la
if HAVE_WIN32
DATA_noinst_libjvlc = jvlc$(LIBEXT) libjvlc$(LIBEXT).a
LIBRARIES_libvlc = $(top_builddir)/src/.libs/libvlc.dll.a $(top_builddir)/src/.libs/libvlc-control.dll.a
LDFLAGS_jvlc = `$(VLC_CONFIG) --libs libvlc`
libjvlc_DATA = libjvlc.def libjvlc.dll.a jvlc$(LIBEXT)
libjvlcdir=$(srcdir)
libjvlc.dll.a libjvlc.def:
$(DLLTOOL) -z libjvlc.def -l libjvlc.dll.a -D jvlc.dll $< $(libjvlc_a_OBJECTS)
jvlc$(LIBEXT): $(libjvlc_a_OBJECTS) \
$(libjvlc_a_DEPENDENCIES)
$(CXXLINK) $(libjvlc_a_OBJECTS) -Wl,--kill-at \
$(srcdir)/libjvlc.def \
$(LIBRARIES_libvlc) -shared $(LIBRARIES_libvlc) $(LIBJINCLUDES) \
$(LDFLAGS_jvlc) $(LTLIBINTL)
# Cygwin work-around, copied by other makefiles
@if test -f "$@.exe"; then mv -f "$@.exe" "$@"; fi
all: libjvlc.dll.a
endif
.PHONY: clean-local
clean-local:
rm -f *.o *~ *.def *.dll
endif
/*****************************************************************************
* audio-jni.cc: JNI native audio functions for VLC Java Bindings
*****************************************************************************
* Copyright (C) 1998-2006 the VideoLAN team
*
* Authors: Filippo Carone <filippo@carone.org>
* Philippe Morin <phmorin@free.fr>
*
*
* $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., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/
/* These are a must*/
#include <jni.h>
#include <vlc/libvlc.h>
/* JVLC internal imports, generated by gcjh */
#include "../includes/Audio.h"
#include "utils.h"
JNIEXPORT jint JNICALL Java_org_videolan_jvlc_Audio__1getTrack (JNIEnv *env, jobject _this)
{
INIT_FUNCTION;
GET_INPUT_THREAD;
jint res = 0;
res = libvlc_audio_get_track( input, &exception );
libvlc_media_instance_release(input);
CHECK_EXCEPTION;
return res;
}
JNIEXPORT void JNICALL Java_org_videolan_jvlc_Audio__1setTrack (JNIEnv *env, jobject _this, jint value)
{
INIT_FUNCTION;
GET_INPUT_THREAD;
libvlc_audio_set_track( input, value, &exception );
libvlc_media_instance_release(input);
CHECK_EXCEPTION;
}
JNIEXPORT jint JNICALL Java_org_videolan_jvlc_Audio__1getChannel (JNIEnv *env, jobject _this)
{
INIT_FUNCTION;
int res = libvlc_audio_get_channel( ( libvlc_instance_t * ) instance, &exception);
CHECK_EXCEPTION;
return res;
}
JNIEXPORT void JNICALL Java_org_videolan_jvlc_Audio__1setChannel (JNIEnv *env, jobject _this, jint channel)
{
INIT_FUNCTION;
libvlc_audio_set_channel( (libvlc_instance_t *) instance, channel, &exception);
CHECK_EXCEPTION;
}
JNIEXPORT jboolean JNICALL Java_org_videolan_jvlc_Audio__1getMute (JNIEnv *env, jobject _this)
{
INIT_FUNCTION;
jboolean res;
res = (jboolean) libvlc_audio_get_mute( ( libvlc_instance_t * ) instance, &exception );
CHECK_EXCEPTION;
return res;
}
JNIEXPORT void JNICALL Java_org_videolan_jvlc_Audio__1setMute (JNIEnv *env, jobject _this, jboolean value)
{
INIT_FUNCTION;
libvlc_audio_set_mute( ( libvlc_instance_t * ) instance, value, &exception );
CHECK_EXCEPTION;
}
JNIEXPORT void JNICALL Java_org_videolan_jvlc_Audio__1toggleMute (JNIEnv *env, jobject _this)
{
INIT_FUNCTION;
libvlc_audio_get_mute( ( libvlc_instance_t * ) instance, &exception );
CHECK_EXCEPTION;
}
JNIEXPORT jint JNICALL Java_org_videolan_jvlc_Audio__1getVolume (JNIEnv *env, jobject _this)
{
INIT_FUNCTION;
jint res = 0;
res = libvlc_audio_get_volume( ( libvlc_instance_t * ) instance, &exception );
CHECK_EXCEPTION;
return res;
}
JNIEXPORT void JNICALL Java_org_videolan_jvlc_Audio__1setVolume (JNIEnv *env, jobject _this, jint volume)
{
INIT_FUNCTION;
libvlc_audio_set_volume( ( libvlc_instance_t * ) instance, volume, &exception );
CHECK_EXCEPTION;
}
/*****************************************************************************
* vlc-libvlc-jni.cc: JNI interface for vlc Java Bindings
*****************************************************************************
* Copyright (C) 1998-2006 the VideoLAN team
*
* Authors: Filippo Carone <filippo@carone.org>
* Philippe Morin <phmorin@free.fr>
*
* $Id: core-jni.cc 156 2006-08-01 09:23:01Z 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
* 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, USA.
*****************************************************************************/
/* These are a must*/
#include <jni.h>
#include <vlc/libvlc.h>
#include <stdio.h> // for printf
#include <stdlib.h> // for calloc
#include <string.h> // for strcmp
#ifdef WIN32
#undef usleep
#define usleep(var) Sleep(var/1000)
#else
#include <unistd.h> // for usleep
#endif
/* JVLC internal imports, generated by gcjh */
#include "../includes/JVLC.h"
#include <jawt.h>
#include <jawt_md.h>
#include "utils.h"
jlong getClassInstance (JNIEnv *env, jobject _this);
JNIEXPORT jlong JNICALL Java_org_videolan_jvlc_JVLC_createInstance (JNIEnv *env, jobject _this, jobjectArray args) {
long res;
int argc;
const char **argv;
libvlc_exception_t exception;
libvlc_exception_init( &exception );
argc = (int) env->GetArrayLength((jarray) args);
argv = (const char **) malloc(argc * sizeof(char*));
for (int i = 0; i < argc; i++) {
argv[i] = env->GetStringUTFChars((jstring) env->GetObjectArrayElement(args, i),
0
);
}
res = (long) libvlc_new(argc, (char**) argv, &exception );
CHECK_EXCEPTION ;
return res;
}
JNIEXPORT void JNICALL Java_org_videolan_jvlc_JVLC__1destroy (JNIEnv *env, jobject _this)
{
long instance;
instance = getClassInstance( env, _this );
libvlc_release( (libvlc_instance_t *) instance );
return;
}
//JNIEXPORT void JNICALL Java_org_videolan_jvlc_JVLC__1paint (JNIEnv *env, jobject _this, jobject canvas, jobject graphics)
/*
* Utility functions
*/
jlong getClassInstance (JNIEnv *env, jobject _this) {
/* get the id field of object */
jclass cls = env->GetObjectClass(_this);
jmethodID mid = env->GetMethodID(cls, "getInstance", "()J");
jlong field = env->CallLongMethod(_this, mid);
return field;
}
/*****************************************************************************
* JVLC.java: JNI interface for vlc Java Bindings
*****************************************************************************
* Copyright (C) 1998-2005 the VideoLAN team
*
* Authors: Filippo Carone <filippo@carone.org>
*
* 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, USA.
*****************************************************************************/
/* These are a must*/
#include <jni.h>
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include <vlc/vlc.h>
#include <vlc/libvlc.h>
#include <jawt.h>
#include <jawt_md.h>
#ifndef WIN32
#include <X11/Xlib.h> // for Xlibs graphics functions
#endif
#include <stdio.h> // for printf
#include <stdlib.h> // for malloc
/* JVLC internal imports, generated by gcjh */
#include "../includes/JVLCCanvas.h"
jlong getJVLCInstance (JNIEnv *env, jobject _this);
// JNIEXPORT void JNICALL Java_org_videolan_jvlc_JVLCCanvas_paint (JNIEnv *env, jobject canvas, jobject graphics) {
// JAWT awt;
// JAWT_DrawingSurface* ds;
// JAWT_DrawingSurfaceInfo* dsi;
// #ifdef WIN32
// JAWT_Win32DrawingSurfaceInfo* dsi_win;
// #else
// JAWT_X11DrawingSurfaceInfo* dsi_x11;
// GC gc;
// #endif
// jint lock;
// libvlc_drawable_t drawable;
// libvlc_exception_t *exception = ( libvlc_exception_t * ) malloc( sizeof( libvlc_exception_t ));
// libvlc_exception_init( exception );
// /* Get the AWT */
// awt.version = JAWT_VERSION_1_3;
// if (JAWT_GetAWT(env, &awt) == JNI_FALSE) {
// printf("AWT Not found\n");
// return;
// }
// /* Get the drawing surface */
// ds = awt.GetDrawingSurface(env, canvas);
// if (ds == NULL) {
// printf("NULL drawing surface\n");
// return;
// }
// /* Lock the drawing surface */
// lock = ds->Lock(ds);
// if((lock & JAWT_LOCK_ERROR) != 0) {
// printf("Error locking surface\n");
// awt.FreeDrawingSurface(ds);
// return;
// }
// /* Get the drawing surface info */
// dsi = ds->GetDrawingSurfaceInfo(ds);
// if (dsi == NULL) {
// printf("Error getting surface info\n");
// ds->Unlock(ds);
// awt.FreeDrawingSurface(ds);
// return;
// }
// #ifdef WIN32
// /* Get the platform-specific drawing info */
// dsi_win = (JAWT_Win32DrawingSurfaceInfo*)dsi->platformInfo;
// /* Now paint */
// drawable = reinterpret_cast<int>(dsi_win->hwnd);
// long vlcInstance = getJVLCInstance( env, canvas );
// libvlc_video_set_parent( (libvlc_instance_t *) vlcInstance, drawable, exception );
// #else // UNIX
// /* Get the platform-specific drawing info */
// dsi_x11 = (JAWT_X11DrawingSurfaceInfo*)dsi->platformInfo;
// /* Now paint */
// gc = XCreateGC(dsi_x11->display, dsi_x11->drawable, 0, 0);
// XSetBackground(dsi_x11->display, gc, 0);
// drawable = dsi_x11->drawable;
// long vlcInstance = getJVLCInstance( env, canvas );
// libvlc_video_set_parent( (libvlc_instance_t *)vlcInstance, drawable, exception );
// XFreeGC(dsi_x11->display, gc);
// #endif
// /* Free the drawing surface info */
// ds->FreeDrawingSurfaceInfo(dsi);
// /* Unlock the drawing surface */
// ds->Unlock(ds);
// /* Free the drawing surface */
// awt.FreeDrawingSurface(ds);
// }
/*
* Utility functions
*/
jlong getJVLCInstance (JNIEnv *env, jobject _this) {
/* get the id field of object */
jclass canvascls = env->GetObjectClass(_this);
jmethodID canvasmid = env->GetMethodID(canvascls, "getJVLC", "()Lorg/videolan/jvlc/JVLC;");
jobject canvasjvlc = env->CallObjectMethod(_this, canvasmid);
jclass cls = env->GetObjectClass(canvasjvlc);
jmethodID mid = env->GetMethodID(cls, "getInstance", "()J");
jlong field = env->CallLongMethod(canvasjvlc, mid);
return field;
}
/*****************************************************************************
* input-jni.cc: JNI native input functions for VLC Java Bindings
*****************************************************************************
* Copyright (C) 1998-2006 the VideoLAN team
*
* Authors: Filippo Carone <filippo@carone.org>
*
*
* $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., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/
#include <jni.h>
#include <vlc/libvlc.h>
/* JVLC internal imports, generated by gcjh */
#include "../includes/Input.h"
#include "utils.h"
JNIEXPORT jlong JNICALL Java_org_videolan_jvlc_Input__1getLength (JNIEnv *env, jobject _this)
{
INIT_FUNCTION ;
vlc_int64_t res = 0;
GET_INPUT_THREAD ;
res = libvlc_media_instance_get_length( input, &exception );
libvlc_media_instance_release(input);
CHECK_EXCEPTION;
return res;
}
JNIEXPORT jfloat JNICALL Java_org_videolan_jvlc_Input__1getPosition (JNIEnv *env, jobject _this)
{
INIT_FUNCTION;
jfloat res;
GET_INPUT_THREAD ;
res = libvlc_media_instance_get_position( input, &exception );
libvlc_media_instance_release(input);
CHECK_EXCEPTION;
return res;
}
JNIEXPORT jlong JNICALL Java_org_videolan_jvlc_Input__1getTime (JNIEnv *env, jobject _this)
{
INIT_FUNCTION;
vlc_int64_t res = 0;
GET_INPUT_THREAD ;
res = libvlc_media_instance_get_time( input, &exception );
libvlc_media_instance_release(input);
CHECK_EXCEPTION ;
return res;
}
JNIEXPORT jfloat JNICALL Java_org_videolan_jvlc_Input__1getFPS (JNIEnv *env, jobject _this)
{
INIT_FUNCTION;
float res;
GET_INPUT_THREAD ;
res = libvlc_media_instance_get_fps( input, &exception );
libvlc_media_instance_release(input);
CHECK_EXCEPTION ;
return res;
}
JNIEXPORT void JNICALL Java_org_videolan_jvlc_Input__1setTime (JNIEnv *env, jobject _this, jlong time)
{
INIT_FUNCTION;
GET_INPUT_THREAD ;
libvlc_media_instance_set_time( input, time, &exception );
libvlc_media_instance_release(input);
CHECK_EXCEPTION;
}
JNIEXPORT void JNICALL Java_org_videolan_jvlc_Input__1setPosition (JNIEnv *env, jobject _this, jfloat position )
{
INIT_FUNCTION;
GET_INPUT_THREAD ;
libvlc_media_instance_set_position( input, position, &exception );
libvlc_media_instance_release(input);
CHECK_EXCEPTION;
}
JNIEXPORT jboolean JNICALL Java_org_videolan_jvlc_Input__1isPlaying (JNIEnv *env, jobject _this)
{
INIT_FUNCTION ;
vlc_bool_t res = 0;
GET_INPUT_THREAD ;
if (input == NULL) {
return false;
}
res = libvlc_media_instance_will_play( input, &exception );
libvlc_media_instance_release(input);
CHECK_EXCEPTION ;
return res;
}
JNIEXPORT jboolean JNICALL Java_org_videolan_jvlc_Input__1hasVout (JNIEnv *env, jobject _this)
{
INIT_FUNCTION ;
vlc_bool_t res = 0;
GET_INPUT_THREAD ;
if (input == NULL) {
return false;
}
res = libvlc_media_instance_has_vout( input, &exception );
libvlc_media_instance_release(input);
CHECK_EXCEPTION ;
return res;
}
/*****************************************************************************
* playlist-jni.cc: JNI native playlist functions for VLC Java Bindings
*****************************************************************************
* Copyright (C) 1998-2006 the VideoLAN team
*
* Authors: Filippo Carone <filippo@carone.org>
*
*
* $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., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/
/* These are a must*/
#include <jni.h>
#include <vlc/libvlc.h>
#ifdef WIN32
#include <windows.h>
#undef usleep
#define usleep(var) Sleep(var/1000)
#else
#include <unistd.h>
#endif
#include <stdio.h>
/* JVLC internal imports, generated by gcjh */
#include "../includes/Playlist.h"
#include "utils.h"
JNIEXPORT jint JNICALL Java_org_videolan_jvlc_Playlist__1playlist_1add (JNIEnv *env, jobject _this, jstring uri, jstring name, jobjectArray options) {
INIT_FUNCTION ;
int res = 0;
int i_options = 0;
const char** ppsz_options = NULL;
const char* psz_uri = env->GetStringUTFChars( uri, 0 );
const char* psz_name = env->GetStringUTFChars( name, 0 );
if ( options != NULL ) {
i_options = ( int ) env->GetArrayLength( ( jarray ) options ) + 1;
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 ] =
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 );
CHECK_EXCEPTION;
} else {
res = libvlc_playlist_add( ( libvlc_instance_t * ) instance, psz_uri, psz_name, &exception );
CHECK_EXCEPTION;
}
if (psz_uri != NULL) {
env->ReleaseStringUTFChars( uri, psz_uri );
}
if (psz_name != NULL) {
env->ReleaseStringUTFChars( name, psz_name );
}
return res;
}
JNIEXPORT void JNICALL Java_org_videolan_jvlc_Playlist__1play (JNIEnv *env, jobject _this, jint id, jobjectArray options)
{
INIT_FUNCTION;
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_playlist_play( ( libvlc_instance_t * ) instance, id, i_options, ( char ** ) ppsz_options, &exception );
CHECK_EXCEPTION;
while (! libvlc_playlist_isplaying( (libvlc_instance_t*) instance, &exception ) )
{
usleep(100);
}
CHECK_EXCEPTION;
}
JNIEXPORT void JNICALL Java_org_videolan_jvlc_Playlist__1pause (JNIEnv *env, jobject _this)
{
INIT_FUNCTION ;
libvlc_playlist_pause( ( libvlc_instance_t* ) instance, &exception );
CHECK_EXCEPTION ;
}
JNIEXPORT void JNICALL Java_org_videolan_jvlc_Playlist__1stop (JNIEnv *env, jobject _this)
{
INIT_FUNCTION ;
libvlc_playlist_stop( ( libvlc_instance_t* ) instance, &exception );
while ( libvlc_playlist_isplaying( (libvlc_instance_t*) instance, &exception ) )
{
usleep(100);
}
CHECK_EXCEPTION ;
}
JNIEXPORT void JNICALL Java_org_videolan_jvlc_Playlist__1next (JNIEnv *env, jobject _this)
{
INIT_FUNCTION ;
libvlc_playlist_next( ( libvlc_instance_t* ) instance, &exception );
CHECK_EXCEPTION ;
}
JNIEXPORT void JNICALL Java_org_videolan_jvlc_Playlist__1prev (JNIEnv *env, jobject _this)
{
INIT_FUNCTION ;
libvlc_playlist_prev( (libvlc_instance_t*) instance, &exception );
CHECK_EXCEPTION ;
}
JNIEXPORT void JNICALL Java_org_videolan_jvlc_Playlist__1clear (JNIEnv *env, jobject _this)
{
INIT_FUNCTION ;
libvlc_playlist_clear( (libvlc_instance_t*) instance, &exception );
CHECK_EXCEPTION ;
}
JNIEXPORT void JNICALL Java_org_videolan_jvlc_Playlist__1deleteItem (JNIEnv *env, jobject _this, jint itemID)
{
INIT_FUNCTION ;
libvlc_playlist_delete_item( ( libvlc_instance_t * ) instance, itemID, &exception );
CHECK_EXCEPTION ;
}
JNIEXPORT jint JNICALL Java_org_videolan_jvlc_Playlist__1itemsCount (JNIEnv *env, jobject _this)
{
INIT_FUNCTION ;
int res = 0;
res = libvlc_playlist_items_count( (libvlc_instance_t*) instance, &exception );
CHECK_EXCEPTION ;
return res;
}
JNIEXPORT jint JNICALL Java_org_videolan_jvlc_Playlist__1isRunning (JNIEnv *env, jobject _this)
{
INIT_FUNCTION ;
int res = 0;
res = libvlc_playlist_isplaying( (libvlc_instance_t*) instance, &exception );
CHECK_EXCEPTION ;
return res;
}
JNIEXPORT void JNICALL Java_org_videolan_jvlc_Playlist__1setLoop
(JNIEnv *env, jobject _this, jboolean loop)
{
INIT_FUNCTION ;
libvlc_playlist_loop( (libvlc_instance_t*) instance, loop, &exception );
CHECK_EXCEPTION ;
}
/*****************************************************************************
* utils.cc: Utility functions for VLC Java Bindings
*****************************************************************************
* Copyright (C) 1998-2006 the VideoLAN team
*
* Authors: Filippo Carone <filippo@carone.org>
*
*
* $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., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/
/* These are a must*/
#include <jni.h>
#include "utils.h"
JAWT awt;
JAWT_DrawingSurfaceInfo* dsi;
void handle_vlc_exception( JNIEnv* env, libvlc_exception_t* exception ) {
jclass newExcCls;
// 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));
}
jlong getInstance (JNIEnv *env, jobject _this) {
/* get the id field of object */
jclass cls = env->GetObjectClass(_this);
jmethodID mid = env->GetMethodID(cls, "getInstance", "()J");
jlong field = env->CallLongMethod(_this, mid);
return field;
}
/* These are a must*/
#include <jni.h>
#include <jawt.h>
#include <jawt_md.h>
#include <vlc/libvlc.h>
#include <stdlib.h> // for free
void handle_vlc_exception( JNIEnv*, libvlc_exception_t* );
jlong getInstance ( JNIEnv* , jobject );
#define CHECK_EXCEPTION \
if ( libvlc_exception_raised( &exception )) \
{ \
handle_vlc_exception( env, &exception ); \
}
#define INIT_FUNCTION \
long instance; \
libvlc_exception_t exception; \
libvlc_exception_init( &exception ); \
instance = getInstance( env, _this );
#define GET_INPUT_THREAD \
libvlc_media_instance_t *input; \
input = libvlc_playlist_get_media_instance( ( libvlc_instance_t *) instance, &exception ); \
CHECK_EXCEPTION ;
#define ATTACH_JVM \
JNIEnv *env; \
jvm->AttachCurrentThread( ( void ** ) &env, NULL );
/*****************************************************************************
* video-jni.cc: JNI native video functions for VLC Java Bindings
*****************************************************************************
* Copyright (C) 1998-2006 the VideoLAN team
*
* Authors: Filippo Carone <filippo@carone.org>
*
*
* $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., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/
/* These are a must*/
#include <jni.h>
#include <jawt.h>
#include <vlc/libvlc.h>
#include <stdio.h>
/* JVLC internal imports, generated by gcjh */
#include "../includes/Video.h"
#include "utils.h"
JNIEXPORT void JNICALL Java_org_videolan_jvlc_Video__1toggleFullscreen (JNIEnv *env, jobject _this)
{
INIT_FUNCTION ;
GET_INPUT_THREAD ;
libvlc_toggle_fullscreen( input, &exception );
libvlc_media_instance_release(input);
CHECK_EXCEPTION ;
}
JNIEXPORT void JNICALL Java_org_videolan_jvlc_Video__1setFullscreen (JNIEnv *env, jobject _this, jboolean value)
{
INIT_FUNCTION ;
GET_INPUT_THREAD ;
libvlc_set_fullscreen( input, value, &exception );
libvlc_media_instance_release(input);
CHECK_EXCEPTION ;
}
JNIEXPORT jboolean JNICALL Java_org_videolan_jvlc_Video__1getFullscreen (JNIEnv *env, jobject _this)
{
INIT_FUNCTION;
int res = 0;
GET_INPUT_THREAD ;
res = libvlc_get_fullscreen( input, &exception );
libvlc_media_instance_release(input);
CHECK_EXCEPTION ;
return res;
}
JNIEXPORT jint JNICALL Java_org_videolan_jvlc_Video__1getHeight (JNIEnv *env, jobject _this)
{
INIT_FUNCTION;
int res = 0;
GET_INPUT_THREAD ;
res = libvlc_video_get_height( input, &exception );
libvlc_media_instance_release(input);
CHECK_EXCEPTION ;
return res;
}
JNIEXPORT jint JNICALL Java_org_videolan_jvlc_Video__1getWidth (JNIEnv *env, jobject _this)
{
INIT_FUNCTION;
int res = 0;
GET_INPUT_THREAD ;
res = libvlc_video_get_width( input, &exception );
libvlc_media_instance_release(input);
CHECK_EXCEPTION ;
return res;
}
JNIEXPORT void JNICALL Java_org_videolan_jvlc_Video__1getSnapshot (JNIEnv *env, jobject _this, jstring filepath, jint width, jint height)
{
INIT_FUNCTION;
const char* psz_filepath = env->GetStringUTFChars( filepath, 0 );
GET_INPUT_THREAD ;
libvlc_video_take_snapshot( input, (char *) psz_filepath,(unsigned int) width,(unsigned int) height, &exception );
libvlc_media_instance_release(input);
CHECK_EXCEPTION ;
if (psz_filepath != NULL) {
env->ReleaseStringUTFChars( filepath, psz_filepath );
}
}
JNIEXPORT void JNICALL Java_org_videolan_jvlc_Video__1destroyVideo (JNIEnv *env, jobject _this)
{
INIT_FUNCTION ;
GET_INPUT_THREAD ;
libvlc_video_destroy( input, &exception );
libvlc_media_instance_release(input);
CHECK_EXCEPTION;
}
JNIEXPORT void JNICALL Java_org_videolan_jvlc_Video__1reparent (JNIEnv *env, jobject _this, jobject canvas)
{
INIT_FUNCTION ;
GET_INPUT_THREAD ;
libvlc_drawable_t drawable;
JAWT awt;
JAWT_DrawingSurface* ds;
JAWT_DrawingSurfaceInfo* dsi;
#ifdef WIN32
JAWT_Win32DrawingSurfaceInfo* dsi_win;
#else
JAWT_X11DrawingSurfaceInfo* dsi_x11;
GC gc;
#endif
jint lock;
/* Get the AWT */
awt.version = JAWT_VERSION_1_3;
if (JAWT_GetAWT(env, &awt) == JNI_FALSE) {
printf("AWT Not found\n");
libvlc_media_instance_release(input);
return;
}
/* Get the drawing surface */
ds = awt.GetDrawingSurface(env, canvas);
if (ds == NULL) {
printf("NULL drawing surface\n");
libvlc_media_instance_release(input);
return;
}
/* Lock the drawing surface */
lock = ds->Lock(ds);
if((lock & JAWT_LOCK_ERROR) != 0) {
printf("Error locking surface\n");
awt.FreeDrawingSurface(ds);
libvlc_media_instance_release(input);
return;
}
/* Get the drawing surface info */
dsi = ds->GetDrawingSurfaceInfo(ds);
if (dsi == NULL) {
printf("Error getting surface info\n");
ds->Unlock(ds);
awt.FreeDrawingSurface(ds);
libvlc_media_instance_release(input);
return;
}
#ifdef WIN32
/* Get the platform-specific drawing info */
dsi_win = (JAWT_Win32DrawingSurfaceInfo*)dsi->platformInfo;
drawable = reinterpret_cast<int>(dsi_win->hwnd);
libvlc_video_set_parent((libvlc_instance_t *) instance, drawable, &exception );
libvlc_media_instance_release(input);
CHECK_EXCEPTION ;
#else // UNIX
/* Get the platform-specific drawing info */
dsi_x11 = (JAWT_X11DrawingSurfaceInfo*)dsi->platformInfo;
/* Now paint */
gc = XCreateGC(dsi_x11->display, dsi_x11->drawable, 0, 0);
XSetBackground(dsi_x11->display, gc, 0);
/* and reparent */
drawable = dsi_x11->drawable;
libvlc_video_set_parent( (libvlc_instance_t *) instance, drawable, &exception );
CHECK_EXCEPTION ;
XFreeGC(dsi_x11->display, gc);
#endif
/* Free the drawing surface info */
ds->FreeDrawingSurfaceInfo(dsi);
/* Unlock the drawing surface */
ds->Unlock(ds);
/* Free the drawing surface */
awt.FreeDrawingSurface(ds);
}
JNIEXPORT void JNICALL Java_org_videolan_jvlc_Video__1paint (JNIEnv *env, jobject _this, jobject canvas, jobject graphics)
{
INIT_FUNCTION ;
libvlc_drawable_t drawable;
JAWT awt;
JAWT_DrawingSurface* ds;
JAWT_DrawingSurfaceInfo* dsi;
#ifdef WIN32
JAWT_Win32DrawingSurfaceInfo* dsi_win;
#else
JAWT_X11DrawingSurfaceInfo* dsi_x11;
GC gc;
#endif
jint lock;
/* Get the AWT */
awt.version = JAWT_VERSION_1_3;
if (JAWT_GetAWT(env, &awt) == JNI_FALSE) {
printf("AWT Not found\n");
return;
}
/* Get the drawing surface */
ds = awt.GetDrawingSurface(env, canvas);
if (ds == NULL) {
printf("NULL drawing surface\n");
return;
}
/* Lock the drawing surface */
lock = ds->Lock(ds);
if((lock & JAWT_LOCK_ERROR) != 0) {
printf("Error locking surface\n");
awt.FreeDrawingSurface(ds);
return;
}
/* Get the drawing surface info */
dsi = ds->GetDrawingSurfaceInfo(ds);
if (dsi == NULL) {
printf("Error getting surface info\n");
ds->Unlock(ds);
awt.FreeDrawingSurface(ds);
return;
}
#ifdef WIN32
/* Get the platform-specific drawing info */
dsi_win = (JAWT_Win32DrawingSurfaceInfo*)dsi->platformInfo;
drawable = reinterpret_cast<int>(dsi_win->hwnd);
libvlc_video_set_parent( (libvlc_instance_t *) instance, drawable, &exception );
CHECK_EXCEPTION ;
#else // UNIX
/* Get the platform-specific drawing info */
dsi_x11 = (JAWT_X11DrawingSurfaceInfo*)dsi->platformInfo;
/* Now paint */
gc = XCreateGC(dsi_x11->display, dsi_x11->drawable, 0, 0);
XSetBackground(dsi_x11->display, gc, 0);
/* and reparent */
drawable = dsi_x11->drawable;
libvlc_video_set_parent( (libvlc_instance_t *) instance, drawable, &exception );
CHECK_EXCEPTION ;
XFreeGC(dsi_x11->display, gc);
#endif
/* Free the drawing surface info */
ds->FreeDrawingSurfaceInfo(dsi);
/* Unlock the drawing surface */
ds->Unlock(ds);
/* Free the drawing surface */
awt.FreeDrawingSurface(ds);
}
JNIEXPORT void JNICALL Java_org_videolan_jvlc_Video__1setSize (JNIEnv *env, jobject _this, jint width, jint height)
{
INIT_FUNCTION ;
GET_INPUT_THREAD ;
libvlc_video_resize( input, width, height, &exception );
libvlc_media_instance_release(input);
CHECK_EXCEPTION ;
}
/*****************************************************************************
* vlm-jni.cc: JNI native VLM functions for VLC Java Bindings
*****************************************************************************
* Copyright (C) 1998-2006 the VideoLAN team
*
* Authors: Philippe Morin <phmorin@free.fr>
*
*
* $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., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/
#include <jni.h>
#include <vlc/libvlc.h>
/* JVLC internal imports, generated by gcjh */
#include "../includes/VLM.h"
#include "utils.h"
JNIEXPORT void JNICALL Java_org_videolan_jvlc_VLM__1addBroadcast (JNIEnv *env, jobject _this, jstring name, jstring inputmrl, jstring outputmrl, jobjectArray options, jboolean enable, jboolean loop)
{
INIT_FUNCTION;
const char* psz_name = env->GetStringUTFChars( name, 0 );
const char* psz_inputmrl = env->GetStringUTFChars( inputmrl, 0 );
const char* psz_outputmrl = env->GetStringUTFChars( outputmrl, 0 );
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_vlm_add_broadcast( (libvlc_instance_t *) instance, (char*)psz_name, (char*)psz_inputmrl, (char*)psz_outputmrl ,
i_options, (char**)ppsz_options, enable, loop, &exception );
CHECK_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 );
}
}
JNIEXPORT void JNICALL Java_org_videolan_jvlc_VLM__1deleteMedia (JNIEnv *env, jobject _this, jstring name)
{
INIT_FUNCTION ;
const char* psz_name = env->GetStringUTFChars( name, 0 );
libvlc_vlm_del_media( (libvlc_instance_t *) instance, (char*)psz_name, &exception);
CHECK_EXCEPTION ;
if (psz_name != NULL) {
env->ReleaseStringUTFChars( name, psz_name );
}
}
JNIEXPORT void JNICALL Java_org_videolan_jvlc_VLM__1setEnabled (JNIEnv *env, jobject _this, jstring name, jboolean newStatus)
{
INIT_FUNCTION ;
const char* psz_name = env->GetStringUTFChars( name, 0 );
libvlc_vlm_set_enabled( (libvlc_instance_t *) instance, (char*)psz_name, newStatus, &exception);
CHECK_EXCEPTION ;
if (psz_name != NULL) {
env->ReleaseStringUTFChars( name, psz_name );
}
}
JNIEXPORT void JNICALL Java_org_videolan_jvlc_VLM__1setOutput (JNIEnv *env, jobject _this, jstring name, jstring mrl)
{
INIT_FUNCTION;
const char* psz_name = env->GetStringUTFChars( name, 0 );
const char* psz_mrl = env->GetStringUTFChars( mrl, 0 );
libvlc_vlm_set_output((libvlc_instance_t *) instance, (char*)psz_name, (char*)psz_mrl, &exception);
CHECK_EXCEPTION ;
if (psz_name != NULL) {
env->ReleaseStringUTFChars( name, psz_name );
}
if (psz_mrl != NULL) {
env->ReleaseStringUTFChars( mrl, psz_mrl );
}
}
JNIEXPORT void JNICALL Java_org_videolan_jvlc_VLM__1setInput (JNIEnv *env, jobject _this, jstring name, jstring mrl)
{
INIT_FUNCTION;
const char* psz_name = env->GetStringUTFChars( name, 0 );
const char* psz_mrl = env->GetStringUTFChars( mrl, 0 );
libvlc_vlm_set_input((libvlc_instance_t *) instance, (char*)psz_name, (char*)psz_mrl, &exception);
CHECK_EXCEPTION ;
if (psz_name != NULL) {
env->ReleaseStringUTFChars( name, psz_name );
}
if (psz_mrl != NULL) {
env->ReleaseStringUTFChars( mrl, psz_mrl );
}
}
JNIEXPORT void JNICALL Java_org_videolan_jvlc_VLM__1setLoop (JNIEnv *env, jobject _this, jstring name, jboolean newStatus)
{
INIT_FUNCTION;
const char* psz_name = env->GetStringUTFChars( name, 0 );
libvlc_vlm_set_loop((libvlc_instance_t *) instance, (char*)psz_name, newStatus, &exception);
CHECK_EXCEPTION ;
if (psz_name != NULL) {
env->ReleaseStringUTFChars( name, psz_name );
}
}
JNIEXPORT void JNICALL Java_org_videolan_jvlc_VLM__1changeMedia (JNIEnv *env, jobject _this, jstring name, jstring inputmrl, jstring outputmrl, jobjectArray options, jboolean enablenewbroadcast, jboolean broadcast)
{
INIT_FUNCTION;
int i_options = 0;
const char** ppsz_options = NULL;
const char* psz_name = env->GetStringUTFChars( name, 0 );
const char* psz_inputmrl = env->GetStringUTFChars( inputmrl, 0 );
const char* psz_outputmrl = env->GetStringUTFChars( outputmrl, 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 );
}
}
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 );
CHECK_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 );
}
}
JNIEXPORT void JNICALL Java_org_videolan_jvlc_VLM__1playMedia (JNIEnv *env, jobject _this, jstring name)
{
INIT_FUNCTION;
const char* psz_name = env->GetStringUTFChars( name, 0 );
libvlc_vlm_play_media( (libvlc_instance_t *) instance, (char*)psz_name, &exception );
CHECK_EXCEPTION ;
if (psz_name != NULL) {
env->ReleaseStringUTFChars( name, psz_name );
}
}
JNIEXPORT void JNICALL Java_org_videolan_jvlc_VLM__1stopMedia (JNIEnv *env, jobject _this, jstring name)
{
INIT_FUNCTION;
const char* psz_name = env->GetStringUTFChars( name, 0 );
libvlc_vlm_stop_media( (libvlc_instance_t *) instance, (char*)psz_name, &exception );
CHECK_EXCEPTION ;
if (psz_name != NULL) {
env->ReleaseStringUTFChars( name, psz_name );
}
}
JNIEXPORT void JNICALL Java_org_videolan_jvlc_VLM__1pauseMedia (JNIEnv *env, jobject _this, jstring name)
{
INIT_FUNCTION;
const char* psz_name = env->GetStringUTFChars( name, 0 );
libvlc_vlm_pause_media( (libvlc_instance_t *) instance, (char*)psz_name, &exception );
CHECK_EXCEPTION ;
if (psz_name != NULL) {
env->ReleaseStringUTFChars( name, psz_name );
}
}
JNIEXPORT void JNICALL Java_org_videolan_jvlc_VLM__1seekMedia (JNIEnv *env, jobject _this, jstring name, jfloat percentage)
{
INIT_FUNCTION;
const char* psz_name = env->GetStringUTFChars( name, 0 );
libvlc_vlm_seek_media( (libvlc_instance_t *) instance, (char*)psz_name, (float)percentage, &exception );
CHECK_EXCEPTION ;
if (psz_name != NULL) {
env->ReleaseStringUTFChars( name, psz_name );
}
}
JNIEXPORT jstring JNICALL Java_org_videolan_jvlc_VLM__1showMedia (JNIEnv *env, jobject _this, jstring name)
{
INIT_FUNCTION;
const char* psz_name = env->GetStringUTFChars( name, 0 );
char *psz_response;
jstring js_response;
psz_response = libvlc_vlm_show_media( (libvlc_instance_t *) instance, (char*)psz_name, &exception );
CHECK_EXCEPTION ;
if (psz_name != NULL) {
env->ReleaseStringUTFChars( name, psz_name );
}
js_response = env->NewStringUTF(psz_response);
if (psz_response != NULL) {
free(psz_response);
}
return js_response;
}
#define LIBVLC_VLM_GET_MEDIA_ATTRIBUTE( attr, returnType, dummyGetType, dummyDefault)\
JNIEXPORT j ## returnType JNICALL Java_org_videolan_jvlc_VLM__1getMedia ## attr(JNIEnv *env, jobject _this, jstring name, jint index) \
{ \
INIT_FUNCTION; \
const char* psz_name = env->GetStringUTFChars( name, 0 ); \
returnType response; \
\
response = libvlc_vlm_get_media_ ## attr( (libvlc_instance_t *) instance, (char*)psz_name, (int)index, &exception ); \
CHECK_EXCEPTION ; \
\
if (psz_name != NULL) { \
env->ReleaseStringUTFChars( name, psz_name ); \
} \
return response; \
}
LIBVLC_VLM_GET_MEDIA_ATTRIBUTE( position, float, Float, -1);
LIBVLC_VLM_GET_MEDIA_ATTRIBUTE( time, int, Integer, -1);
LIBVLC_VLM_GET_MEDIA_ATTRIBUTE( length, int, Integer, -1);
LIBVLC_VLM_GET_MEDIA_ATTRIBUTE( rate, int, Integer, -1);
LIBVLC_VLM_GET_MEDIA_ATTRIBUTE( title, int, Integer, 0);
LIBVLC_VLM_GET_MEDIA_ATTRIBUTE( chapter, int, Integer, 0);
LIBVLC_VLM_GET_MEDIA_ATTRIBUTE( seekable, int, Bool, 0);
#undef LIBVLC_VLM_GET_MEDIA_ATTRIBUTE
...@@ -5973,17 +5973,15 @@ AC_ARG_ENABLE(java-bindings, ...@@ -5973,17 +5973,15 @@ AC_ARG_ENABLE(java-bindings,
[ --enable-java-bindings Enable Java bindings (default disabled)]) [ --enable-java-bindings Enable Java bindings (default disabled)])
if test "${enable_java_bindings}" = "yes" if test "${enable_java_bindings}" = "yes"
then then
AS_IF([test "x${JAVA_HOME}" == "x"], echo ""
[AC_MSG_ERROR([Please set the JAVA_HOME variable to your JDK environment])]) echo "****** WARNING **** WARNING ***** WARNING *************"
AC_PROG_JAVAC echo "*** To compile the java bindings go to the
AC_PROG_JAVA echo "*** bindings/java folder and run ant.
PLUGINS_BINDINGS="${PLUGINS_BINDINGS} java" echo "*** This configuration will continue, so you will be
if test "${JAVAC}" == "javac${EXEEXT}" echo "*** able to compile VideoLAN as usual.
then echo "*******************************************************"
JAVAC="javac${EXEEXT} -cp ./ " echo ""
fi
fi fi
AM_CONDITIONAL(BUILD_JAVA, [test "${enable_java_bindings}" = "yes"])
dnl dnl
dnl test plugins dnl test plugins
...@@ -6162,8 +6160,6 @@ AC_CONFIG_FILES([ ...@@ -6162,8 +6160,6 @@ AC_CONFIG_FILES([
projects/activex/Makefile projects/activex/Makefile
projects/activex/axvlc.inf projects/activex/axvlc.inf
bindings/Makefile bindings/Makefile
bindings/java/Makefile
bindings/java/src/Makefile
bindings/python/Makefile bindings/python/Makefile
doc/Makefile doc/Makefile
extras/package/ipkg/Makefile extras/package/ipkg/Makefile
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment