import org.videolan.jvlc.AudioIntf;
import org.videolan.jvlc.JVLC;
import org.videolan.jvlc.VLCException;
+import org.videolan.jvlc.VolumeListener;
public class VLCExample
jvlc.video.setSize(300, 300);
}
+ jvlc.audio.addVolumeListener(new VolumeListener()
+ {
+ public void volumeChanged() {
+ System.out.println("====> From the listener: volume changed");
+ }
+ });
+
System.out.print("Muting...");
jvlc.audio.setMute(true);
Thread.sleep(3000);
JNIEXPORT void JNICALL Java_org_videolan_jvlc_Audio__1setVolume
(JNIEnv *, jobject, jint);
+/*
+ * Class: org_videolan_jvlc_Audio
+ * Method: _install_callback
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_org_videolan_jvlc_Audio__1install_1callback
+ (JNIEnv *, jobject);
+
#ifdef __cplusplus
}
#endif
package org.videolan.jvlc;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
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 );
-
- public Audio( long instance ) {
- this.libvlcInstance = instance;
- }
-
+ 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 {
+ public void setTrack(int track) throws VLCException {
_setTrack(track);
}
return _getChannel();
}
- public void setChannel( int channel ) throws VLCException {
+ 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 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;
}
utils.cc \
utils.h \
video-jni.cc \
- vlm-jni.cc
+ vlm-jni.cc \
+ callback-jni.cc
+
libjvlc_la_CPPFLAGS = `$(VLC_CONFIG) --cflags pic` $(JINCLUDES)
libjvlc_la_LIBADD = ../../../src/libvlc-control.la $(LIBJINCLUDES)
res = (long) libvlc_new(argc, (char**) argv, exception );
free( exception );
-
+
return res;
}
* Register for a callback notification
* \param p_instance the libvlc instance
* \param i_event_type the desired event mask to which we want to listen
- * \param pf_callback function the function to call when an_Event occurs
+ * \param f_callback the function to call when i_event_type occurs
+ * \param user_data user provided data to carry with the event
* \param p_e an initialized exception pointer
*/
-/* void libvlc_callback_register_for_eventtype( libvlc_instance_t *p_instance, */
-/* libvlc_event_type_t i_event_type, */
-/* libvlc_callback_t pf_callback, */
-/* libvlc_exception_t *p_e ); */
+VLC_PUBLIC_API void libvlc_callback_register_for_event( libvlc_instance_t *p_instance,
+ libvlc_event_type_t i_event_type,
+ libvlc_callback_t f_callback,
+ void *user_data,
+ libvlc_exception_t *p_e );
/**
* Unregister a callback notification
* \param p_instance the libvlc instance
* \param i_event_type the desired event mask to which we want to unregister
- * \param pf_function the function to call when an_Event occurs
+ * \param f_callback the function to call when i_event_type occurs
* \param p_e an initialized exception pointer
*/
-/* void libvlc_callback_unregister_for_eventtype( libvlc_instance_t *p_instance, */
-/* libvlc_event_type_t i_event_type, */
-/* libvlc_callback_t pf_function, */
-/* libvlc_exception_t *p_e ); */
-
+VLC_PUBLIC_API void libvlc_callback_unregister_for_event( libvlc_instance_t *p_instance,
+ libvlc_event_type_t i_event_type,
+ libvlc_callback_t f_callback,
+ libvlc_exception_t *p_e );
/** @} */
libvlc_event_type_t type;
char reserved[8]; /* For future use */
} libvlc_event_t;
-
-typedef void ( *libvlc_callback_t )( struct libvlc_instance_t *, libvlc_event_t * );
+
+/**
+ * Callback function notification
+ * \param p_instance the libvlc instance
+ * \param p_event the event triggering the callback
+ * \param p_user_data user provided data
+ */
+
+typedef void ( *libvlc_callback_t )( struct libvlc_instance_t *, libvlc_event_t *, void * );
/**@} */
dist_pkginclude_HEADERS = \
../include/vlc/vlc.h \
../include/vlc/libvlc.h \
+ ../include/vlc/libvlc_structures.h \
../include/vlc/mediacontrol.h \
../include/vlc/mediacontrol_structures.h \
$(NULL)
control/input.c \
control/video.c \
control/audio.c \
+ control/callback.c \
control/mediacontrol_internal.h \
control/mediacontrol_core.c \
control/mediacontrol_util.c \
while( p_listitem )
{
- struct libvlc_callback_entry_list *p_nextlistitem = p_listitem->next;
+ struct libvlc_callback_entry_list_t *p_nextlistitem = p_listitem->next;
free( p_listitem );
p_listitem = p_nextlistitem;
}
struct libvlc_callback_entry_t
{
- libvlc_callback_t callback;
- libvlc_event_type_t eventType;
+ libvlc_instance_t *p_instance;
+ libvlc_callback_t f_callback;
+ libvlc_event_type_t i_event_type;
void *p_user_data;
};
struct libvlc_instance_t *p_instance; ///< Parent instance
};
+
+static inline void add_callback_entry( struct libvlc_callback_entry_t *entry,
+ struct libvlc_callback_entry_list_t **list )
+{
+ struct libvlc_callback_entry_list_t *new_listitem;
+ new_listitem = malloc( sizeof( struct libvlc_callback_entry_list_t ) );
+ new_listitem->elmt = entry;
+ new_listitem->next = *list;
+ new_listitem->prev = NULL;
+
+ if(*list)
+ (*list)->prev = new_listitem;
+
+ *list = new_listitem;
+}
+
#define RAISENULL( psz,a... ) { libvlc_exception_raise( p_e, psz,##a ); \
return NULL; }
#define RAISEVOID( psz,a... ) { libvlc_exception_raise( p_e, psz,##a ); \