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/Video.class org/videolan/jvlc/JLibVLC.class org/videolan/jvlc/JVLC.class org/videolan/jvlc/JVLCCanvas.class org/videolan/jvlc/JVLCPanel.class org/videolan/jvlc/VLMIntf.class org/videolan/jvlc/GenericVideoWidget.class
+OBJECTS = org/videolan/jvlc/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
PROCESSOR_FAMILY = `uname -m | sed -e 's/^i.86/i386/' | sed -e 's/^x86_64/amd64/'`
private native void _setTime(long value);
private native void _setPosition(float value);
private native boolean _isPlaying();
- private native boolean _hasVout();
+ private native boolean _hasVout() throws VLCException;
public Input( long instance ) {
}
public boolean hasVout() throws VLCException {
- return _hasVout();
+ return _hasVout();
}
public long getInstance() {
package org.videolan.jvlc;
-
public class JVLC implements Runnable {
static {
System.loadLibrary("jvlc" );
}
-
+
/**
* These are set as final since they live along the jvlc object
*/
*/
public void destroy() {
beingDestroyed = true;
- _destroy();
+ if (!beingDestroyed)
+ {
+ _destroy();
+ }
}
* In this thread we check the playlist and input status.
*/
public void run() {
- while (! beingDestroyed) {
- try {
- while (playlist.isRunning()) {
- if (input.isPlaying()) {
- inputPlaying = true;
- }
- else {
- inputPlaying = false;
- }
-
- if (input.hasVout()) {
- inputVout = true;
- }
- else {
- inputVout = false;
- }
- try {
+ try {
+ while (!beingDestroyed) {
+ try {
+ while (playlist.isRunning()) {
+ inputPlaying = input.isPlaying();
+ inputVout = input.hasVout();
Thread.sleep(resolution);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
+ } // while playlist running
+ } catch (VLCException e) {
+ e.printStackTrace();
}
- } catch (VLCException e1) { } // while playlist running
- inputPlaying = false;
- inputVout = false;
- try {
+ inputPlaying = false;
+ inputVout = false;
Thread.sleep(resolution);
- } catch (InterruptedException e) {
- e.printStackTrace();
- } // try
- } // while ! being destroyed
- } // run
+ } // while ! being destroyed
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#finalize()
+ */
+ protected void finalize() throws Throwable {
+ destroy();
+ super.finalize();
+ }
+
}
public class JVLCCanvas extends Canvas {
- public native void paint(Graphics g);
+ 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 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() {
*/
package org.videolan.jvlc;
-import java.awt.Component;
import java.awt.Dimension;
+import java.awt.Graphics;
public final class Video implements VideoIntf {
private long libvlcInstance;
+ private JVLCCanvas actualCanvas;
+
public Video( long libvlcInstance) {
this.libvlcInstance = libvlcInstance;
-
}
/*
private native int _getWidth();
private native void _getSnapshot(String filename);
private native void _destroyVideo();
- private native void _reparent(Component component);
+ private native void _reparent(JVLCCanvas component);
private native void _setSize(int width, int height);
-
+ private native void _paint(JVLCCanvas canvas, Graphics g);
+
/* (non-Javadoc)
* @see org.videolan.jvlc.VideoIntf#destroyVideo()
*/
/* (non-Javadoc)
* @see org.videolan.jvlc.VideoIntf#reparentVideo(java.awt.Component)
*/
- public void reparent(Component c) throws VLCException {
+ public void reparent(JVLCCanvas c) throws VLCException {
_reparent(c);
+ setActualCanvas(c);
}
/* (non-Javadoc)
*/
public void setSize(int width, int height) throws VLCException {
_setSize( width, height );
-
}
/* (non-Javadoc)
public void setSize(Dimension d) throws VLCException {
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;
}
package org.videolan.jvlc;
-import java.awt.Component;
import java.awt.Dimension;
* @param c
* @throws VLCException
*/
- void reparent(Component c) throws VLCException;
+ void reparent(JVLCCanvas c) throws VLCException;
/**
* Resizes video output to width and height. This operation could be necessary
}
+//JNIEXPORT void JNICALL Java_org_videolan_jvlc_JVLC__1paint (JNIEnv *env, jobject _this, jobject canvas, jobject graphics)
+
+
/*
* Utility functions
*/
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
+// 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;
+// 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);
+// 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 );
+// drawable = dsi_x11->drawable;
+// long vlcInstance = getJVLCInstance( env, canvas );
+// libvlc_video_set_parent( (libvlc_instance_t *)vlcInstance, drawable, exception );
- XFreeGC(dsi_x11->display, gc);
+// XFreeGC(dsi_x11->display, gc);
-#endif
+// #endif
- /* Free the drawing surface info */
- ds->FreeDrawingSurfaceInfo(dsi);
+// /* Free the drawing surface info */
+// ds->FreeDrawingSurfaceInfo(dsi);
- /* Unlock the drawing surface */
- ds->Unlock(ds);
+// /* Unlock the drawing surface */
+// ds->Unlock(ds);
- /* Free the drawing surface */
- awt.FreeDrawingSurface(ds);
-}
+// /* Free the drawing surface */
+// awt.FreeDrawingSurface(ds);
+// }
/*
* Utility functions
dsi_win = (JAWT_Win32DrawingSurfaceInfo*)dsi->platformInfo;
drawable = reinterpret_cast<int>(dsi_win->hwnd);
- libvlc_video_reparent( input, drawable, exception );
+ libvlc_video_set_parent( input, drawable, exception );
CHECK_EXCEPTION_FREE ;
/* and reparent */
drawable = dsi_x11->drawable;
- libvlc_video_reparent( input, drawable, exception );
+ libvlc_video_set_parent( (libvlc_instance_t *) instance, drawable, exception );
CHECK_EXCEPTION_FREE ;
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( input, drawable, exception );
+
+ CHECK_EXCEPTION_FREE ;
+
+#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_FREE ;
+
+ 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)
{