mirror of
https://github.com/videolan/vlc.git
synced 2024-12-01 13:55:14 +08:00
Merge bindings to trunk
This commit is contained in:
parent
9160790e0c
commit
b3f7a2eadb
34
bindings/STATUS
Normal file
34
bindings/STATUS
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
###########################
|
||||||
|
# STATUS for VLC bindings #
|
||||||
|
###########################
|
||||||
|
|
||||||
|
* General
|
||||||
|
---------
|
||||||
|
* TODO
|
||||||
|
- Integrate bindings creation with build system
|
||||||
|
|
||||||
|
* API
|
||||||
|
-----
|
||||||
|
* TODO
|
||||||
|
- Clean up / Use VLC coding styles
|
||||||
|
- VLM control
|
||||||
|
|
||||||
|
* Python: (Olivier Aubert)
|
||||||
|
---------
|
||||||
|
* Implements the mediacontrol API
|
||||||
|
* TODO
|
||||||
|
- Fix win32 build
|
||||||
|
- Clean up glue file
|
||||||
|
|
||||||
|
* Java: (Filippo Carone)
|
||||||
|
-------
|
||||||
|
* Implements libvlc base API
|
||||||
|
* Only works with gcj
|
||||||
|
* TODO
|
||||||
|
- Fix crash with command line arguments
|
||||||
|
- Implement mediacontrol
|
||||||
|
- provide "make install"
|
||||||
|
|
||||||
|
* .NET: (jlj)
|
||||||
|
-------
|
||||||
|
* Not commited yet :)
|
1
bindings/java-gcj/AUTHORS
Normal file
1
bindings/java-gcj/AUTHORS
Normal file
@ -0,0 +1 @@
|
|||||||
|
Filippo Carone <filippo[dontspam]@carone.org>
|
100
bindings/java-gcj/JVLC.java
Normal file
100
bindings/java-gcj/JVLC.java
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* JVLC.java: global class for vlc Java Bindings
|
||||||
|
*****************************************************************************
|
||||||
|
* Copyright (C) 1998-2004 VideoLAN
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
public class JVLC {
|
||||||
|
|
||||||
|
private int id;
|
||||||
|
|
||||||
|
public JVLC(String[] args) {
|
||||||
|
String[] properArgs = new String[args.length + 1];
|
||||||
|
properArgs[0] = "jvlc";
|
||||||
|
for (int i = 0; i < args.length; i++)
|
||||||
|
properArgs[i+1] = args[i];
|
||||||
|
|
||||||
|
this.id = create();
|
||||||
|
init(properArgs);
|
||||||
|
}
|
||||||
|
|
||||||
|
private native int create();
|
||||||
|
|
||||||
|
private native int init(String[] args);
|
||||||
|
|
||||||
|
public native int addInterface(String moduleName, boolean blocking, boolean startPlay);
|
||||||
|
|
||||||
|
public int addInterface(boolean blocking, boolean startPlay) {
|
||||||
|
return addInterface(null, blocking, startPlay);
|
||||||
|
}
|
||||||
|
|
||||||
|
public native String getVersion();
|
||||||
|
|
||||||
|
public native String getError(int errorCode);
|
||||||
|
|
||||||
|
public native int die();
|
||||||
|
|
||||||
|
public native int cleanUp();
|
||||||
|
|
||||||
|
public native int setVariable(JVLCVariable jvlcVariable);
|
||||||
|
|
||||||
|
public native JVLCVariable getVariable(String varName); // XXX in progress
|
||||||
|
|
||||||
|
public native int addTarget(String URI, String[] options, int insertMode, int position);
|
||||||
|
|
||||||
|
public native int play();
|
||||||
|
|
||||||
|
public native int pause();
|
||||||
|
|
||||||
|
public native int stop();
|
||||||
|
|
||||||
|
public native boolean isPlaying();
|
||||||
|
|
||||||
|
public native float getPosition();
|
||||||
|
|
||||||
|
public native float setPosition(float position);
|
||||||
|
|
||||||
|
public native int getTime();
|
||||||
|
|
||||||
|
public native int setTime(int seconds, boolean relative);
|
||||||
|
|
||||||
|
public native int getLength();
|
||||||
|
|
||||||
|
public native float speedFaster();
|
||||||
|
|
||||||
|
public native float speedSlower();
|
||||||
|
|
||||||
|
public native int getPlaylistIndex();
|
||||||
|
|
||||||
|
public native int getPlaylistItems();
|
||||||
|
|
||||||
|
public native int playlistNext();
|
||||||
|
|
||||||
|
public native int playlistPrev();
|
||||||
|
|
||||||
|
public native int playlistClear();
|
||||||
|
|
||||||
|
public native int getVolume();
|
||||||
|
|
||||||
|
public native int setVolume(int volume);
|
||||||
|
|
||||||
|
public native int muteVolume();
|
||||||
|
|
||||||
|
public native int fullScreen();
|
||||||
|
}
|
13
bindings/java-gcj/JVLCBoolVariable.java
Normal file
13
bindings/java-gcj/JVLCBoolVariable.java
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
public class JVLCBoolVariable extends JVLCVariable {
|
||||||
|
|
||||||
|
public JVLCBoolVariable(String name, int value) {
|
||||||
|
super(name);
|
||||||
|
if (value != 0) this.value = new Integer(1);
|
||||||
|
else this.value = new Integer(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getBoolValue() {
|
||||||
|
return ((Integer)value).intValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
12
bindings/java-gcj/JVLCFloatVariable.java
Normal file
12
bindings/java-gcj/JVLCFloatVariable.java
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
public class JVLCFloatVariable extends JVLCVariable {
|
||||||
|
|
||||||
|
public JVLCFloatVariable(String name, float value) {
|
||||||
|
super(name);
|
||||||
|
this.value = new Float(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public float getFloatValue() {
|
||||||
|
return ((Float)value).floatValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
13
bindings/java-gcj/JVLCIntVariable.java
Normal file
13
bindings/java-gcj/JVLCIntVariable.java
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
public class JVLCIntVariable extends JVLCVariable {
|
||||||
|
|
||||||
|
|
||||||
|
public JVLCIntVariable(String name, int value) {
|
||||||
|
super(name);
|
||||||
|
this.value = new Integer(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getIntValue() {
|
||||||
|
return ((Integer)value).intValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
12
bindings/java-gcj/JVLCStringVariable.java
Normal file
12
bindings/java-gcj/JVLCStringVariable.java
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
public class JVLCStringVariable extends JVLCVariable {
|
||||||
|
|
||||||
|
public JVLCStringVariable(String name, String value) {
|
||||||
|
super(name);
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getStringValue() {
|
||||||
|
return (String)value;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
12
bindings/java-gcj/JVLCTimeVariable.java
Normal file
12
bindings/java-gcj/JVLCTimeVariable.java
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
public class JVLCTimeVariable extends JVLCVariable {
|
||||||
|
|
||||||
|
public JVLCTimeVariable(String name, long value) {
|
||||||
|
super(name);
|
||||||
|
this.value = new Long(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getTimeValue() {
|
||||||
|
return ((Long)value).longValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
19
bindings/java-gcj/JVLCVarValue.java
Normal file
19
bindings/java-gcj/JVLCVarValue.java
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
public class JVLCVarValue {
|
||||||
|
|
||||||
|
String name;
|
||||||
|
int OID;
|
||||||
|
|
||||||
|
public JVLCVarValue(String name, int OID) {
|
||||||
|
this.name = name;
|
||||||
|
this.OID = OID;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getOID() {
|
||||||
|
return OID;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
12
bindings/java-gcj/JVLCVarVariable.java
Normal file
12
bindings/java-gcj/JVLCVarVariable.java
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
public class JVLCVarVariable extends JVLCVariable {
|
||||||
|
|
||||||
|
public JVLCVarVariable(String name, JVLCVarValue value) {
|
||||||
|
super(name);
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public JVLCVarValue getVarValue() {
|
||||||
|
return (JVLCVarValue)value;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
21
bindings/java-gcj/JVLCVariable.java
Normal file
21
bindings/java-gcj/JVLCVariable.java
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
public abstract class JVLCVariable {
|
||||||
|
String name;
|
||||||
|
Object value;
|
||||||
|
|
||||||
|
public JVLCVariable(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setValue(Object value) {
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
28
bindings/java-gcj/Makefile
Normal file
28
bindings/java-gcj/Makefile
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
OBJECTS = VlcClient.o JVLC.o JVLCVariable.o JVLCVarValue.o JVLCVarVariable.o JVLCIntVariable.o JVLCTimeVariable.o JVLCStringVariable.o JVLCFloatVariable.o JVLCBoolVariable.o vlc-glue.o
|
||||||
|
FLAGS = -I. -I/usr/local/include/vlc -L../../lib -lvlc `top_builddir=../.. ../../vlc-config --libs vlc builtin extern` `top_builddir=../.. ../../vlc-config --cxxflags` --main=VlcClient
|
||||||
|
JHEADERS = JVLC.h JVLCVariable.h JVLCIntVariable.h JVLCBoolVariable.h JVLCTimeVariable.h JVLCStringVariable.h JVLCFloatVariable.h JVLCVarVariable.h JVLCVarValue.h
|
||||||
|
JCC=gcj
|
||||||
|
CXX=g++
|
||||||
|
JCH=gcjh
|
||||||
|
DEBUG=-g
|
||||||
|
|
||||||
|
VlcClient: $(OBJECTS)
|
||||||
|
$(JCC) -o jvlc -I. $(OBJECTS) $(DEBUG) $(FLAGS)
|
||||||
|
|
||||||
|
VlcClient.class: VlcClient.java
|
||||||
|
$(JCC) $(DEBUG) -C VlcClient.java
|
||||||
|
|
||||||
|
%.o: %.class
|
||||||
|
$(JCC) $(DEBUG) -c $?
|
||||||
|
|
||||||
|
%.class: %.java
|
||||||
|
$(JCC) $(DEBUG) -C $?
|
||||||
|
|
||||||
|
%.h: %.class
|
||||||
|
$(JCH) $(*F)
|
||||||
|
|
||||||
|
vlc-glue.o: $(JHEADERS) vlc-glue.cc
|
||||||
|
$(CXX) $(DEBUG) -I./ -c vlc-glue.cc
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f jvlc *.o *.class $(JHEADERS) *~
|
10
bindings/java-gcj/README
Normal file
10
bindings/java-gcj/README
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
Implementation Notes
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
The union vlc_value_t has been implemented as a hierarchy of classes
|
||||||
|
which has JVLCVariable.class as the root. All the children of this
|
||||||
|
class are named JVLC<type>Variable.class and are mapped 1:1 to the
|
||||||
|
union members with some exceptions: p_address is not implemented since
|
||||||
|
there's no notion of address in Java, vlc_object_t is not implemented
|
||||||
|
since I don't know how to represent it in Java and is not defined in
|
||||||
|
vlc/vlc.h
|
12
bindings/java-gcj/VlcClient.java
Normal file
12
bindings/java-gcj/VlcClient.java
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
public class VlcClient {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
JVLC vlc = new JVLC(args);
|
||||||
|
System.out.println(vlc.getVersion());
|
||||||
|
vlc.addInterface(true, true);
|
||||||
|
vlc.die();
|
||||||
|
vlc.cleanUp();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
300
bindings/java-gcj/vlc-glue.cc
Normal file
300
bindings/java-gcj/vlc-glue.cc
Normal file
@ -0,0 +1,300 @@
|
|||||||
|
/* These are a must*/
|
||||||
|
#include <gcj/cni.h>
|
||||||
|
#include <vlc/vlc.h>
|
||||||
|
|
||||||
|
#include <stdio.h> // for printf
|
||||||
|
#include <stdlib.h> // for calloc
|
||||||
|
|
||||||
|
/* JVLC internal imports, generated by gcjh */
|
||||||
|
#include "JVLC.h"
|
||||||
|
#include "JVLCVariable.h"
|
||||||
|
#include "JVLCIntVariable.h"
|
||||||
|
#include "JVLCBoolVariable.h"
|
||||||
|
#include "JVLCFloatVariable.h"
|
||||||
|
#include "JVLCStringVariable.h"
|
||||||
|
#include "JVLCTimeVariable.h"
|
||||||
|
#include "JVLCVarVariable.h"
|
||||||
|
#include "JVLCVarValue.h"
|
||||||
|
|
||||||
|
/* Java classes used throughout here */
|
||||||
|
#include <java/lang/String.h>
|
||||||
|
#include <java/lang/Class.h>
|
||||||
|
#include <java/lang/System.h>
|
||||||
|
#include <java/io/PrintStream.h>
|
||||||
|
|
||||||
|
void setString(jstring orig, char* dest);
|
||||||
|
|
||||||
|
jint JVLC::create () {
|
||||||
|
return VLC_Create();
|
||||||
|
}
|
||||||
|
|
||||||
|
jint JVLC::init(JArray< ::java::lang::String *> *args) {
|
||||||
|
|
||||||
|
int argc = 0;
|
||||||
|
char* arguments[argc];
|
||||||
|
|
||||||
|
if (args != NULL) // It's a very bad day otherwise
|
||||||
|
{
|
||||||
|
argc = args->length;
|
||||||
|
arguments[argc];
|
||||||
|
|
||||||
|
/*
|
||||||
|
* convert the JArray<String*>* in char**
|
||||||
|
* so in a way suitable for VLC_Init
|
||||||
|
*/
|
||||||
|
jstring* argsElements = elements(args);
|
||||||
|
|
||||||
|
for (int i = 0; i < argc; i++) {
|
||||||
|
arguments[i] = (char*) malloc(JvGetStringUTFLength(argsElements[i]) + 1);
|
||||||
|
setString(argsElements[i], arguments[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return VLC_Init(this->id, argc, arguments);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
jint JVLC::addInterface(java::lang::String* moduleName, jboolean blocking, jboolean startPlay) {
|
||||||
|
|
||||||
|
char* psz_module = NULL;
|
||||||
|
if (moduleName != NULL) {
|
||||||
|
psz_module = (char *) malloc(JvGetStringUTFLength(moduleName));
|
||||||
|
setString(moduleName, psz_module);
|
||||||
|
}
|
||||||
|
|
||||||
|
int i_blocking = 0;
|
||||||
|
int i_startPlay = 0;
|
||||||
|
if (blocking) i_blocking = 1;
|
||||||
|
if (startPlay) i_startPlay = 1;
|
||||||
|
|
||||||
|
int addIntf_res = VLC_AddIntf(this->id, (char* const) psz_module, i_blocking, i_startPlay);
|
||||||
|
|
||||||
|
if (psz_module != NULL)
|
||||||
|
free(psz_module);
|
||||||
|
|
||||||
|
return addIntf_res;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
jstring JVLC::getVersion() {
|
||||||
|
return JvNewStringUTF(VLC_Version());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
jstring JVLC::getError(jint errorCode) {
|
||||||
|
return JvNewStringUTF(VLC_Error(errorCode));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
jint JVLC::die() {
|
||||||
|
return VLC_Die(this->id);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
jint JVLC::cleanUp() {
|
||||||
|
return VLC_CleanUp(this->id);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
jint JVLC::setVariable(::JVLCVariable *jvlcVariable) {
|
||||||
|
|
||||||
|
/* these are the two parameters given the the
|
||||||
|
* VLC_VariableSet() function
|
||||||
|
*/
|
||||||
|
vlc_value_t value;
|
||||||
|
char* psz_var = NULL;
|
||||||
|
|
||||||
|
if (jvlcVariable != NULL) {
|
||||||
|
jclass variableClass = jvlcVariable->getClass();
|
||||||
|
|
||||||
|
/* We use the class name for kinda of instanceof */
|
||||||
|
jstring className = variableClass->getName();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* VLC_SetVariable takes a union as its second argument.
|
||||||
|
* The union members are mapped 1:1 to java types which
|
||||||
|
* extend JVLCVariable. So here we check the runtime type
|
||||||
|
* of the actual variable and act consequently. Here is the
|
||||||
|
* mapping:
|
||||||
|
*
|
||||||
|
* typedef union
|
||||||
|
*{
|
||||||
|
* int i_int; JVLCIntVariable
|
||||||
|
* vlc_bool_t b_bool; JVLCBoolVariable
|
||||||
|
* float f_float; JVLCFloatVariable
|
||||||
|
* char * psz_string; JVLCStringVariable
|
||||||
|
* void * p_address; -- NOT IMPLEMENTED --
|
||||||
|
* vlc_object_t * p_object; -- NOT IMPLEMENTED --
|
||||||
|
* vlc_list_t * p_list; JVLCListVariable XXX:TODO
|
||||||
|
* signed long long i_time; JVLCTimeVariable
|
||||||
|
* struct { char *psz_name; int i_object_id; } var; JVLCVarVariable <- this name sucks
|
||||||
|
* // Make sure the structure is at least 64bits
|
||||||
|
* struct { char a, b, c, d, e, f, g, h; } padding; <- Do we really need this?
|
||||||
|
*
|
||||||
|
* } vlc_value_t;
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* i_int */
|
||||||
|
if (className->equals(JvNewStringUTF("VLCIntVariable" ))) {
|
||||||
|
value.i_int = ((::JVLCIntVariable *)jvlcVariable)->getIntValue();
|
||||||
|
}
|
||||||
|
/* b_bool */
|
||||||
|
else if (className->equals(JvNewStringUTF("VLCBoolVariable"))) {
|
||||||
|
value.b_bool = ((::JVLCBoolVariable *)jvlcVariable)->getBoolValue();
|
||||||
|
}
|
||||||
|
/* f_float */
|
||||||
|
else if (className->equals(JvNewStringUTF("VLCFloatVariable"))) {
|
||||||
|
value.f_float = ((::JVLCFloatVariable *)jvlcVariable)->getFloatValue();
|
||||||
|
}
|
||||||
|
/* psz_string */
|
||||||
|
else if (className->equals(JvNewStringUTF("VLCStringVariable"))) {
|
||||||
|
value.psz_string = (char* const) elements((((::JVLCStringVariable *)jvlcVariable)->getStringValue())->toCharArray());
|
||||||
|
}
|
||||||
|
/* i_time */
|
||||||
|
else if (className->equals(JvNewStringUTF("VLCTimeVariable"))) {
|
||||||
|
value.i_time = ((::JVLCTimeVariable *)jvlcVariable)->getTimeValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* var */
|
||||||
|
else if (className->equals(JvNewStringUTF("VLCVarVariable"))) {
|
||||||
|
jstring varValueName = ((::JVLCVarVariable *)jvlcVariable)->getVarValue()->getName();
|
||||||
|
value.var.psz_name = (char *) malloc(JvGetStringUTFLength(varValueName));
|
||||||
|
setString(varValueName, value.var.psz_name);
|
||||||
|
value.var.i_object_id = (((::JVLCVarVariable *)jvlcVariable)->getVarValue())->getOID();
|
||||||
|
}
|
||||||
|
psz_var = (char *) malloc(JvGetStringUTFLength(jvlcVariable->getName()));
|
||||||
|
setString(jvlcVariable->getName(), psz_var);
|
||||||
|
}
|
||||||
|
|
||||||
|
return VLC_VariableSet(this->id, (char* const) psz_var, value);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
jint JVLC::addTarget(::java::lang::String *URI, JArray< ::java::lang::String *> *options, jint insertMode, jint position) {
|
||||||
|
|
||||||
|
char* psz_target = NULL;
|
||||||
|
char** ppsz_options = NULL;
|
||||||
|
int options_number = 0;
|
||||||
|
|
||||||
|
if (URI != NULL) {
|
||||||
|
psz_target = (char *) malloc( JvGetStringUTFLength(URI));
|
||||||
|
setString(URI, psz_target);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (options != NULL) {
|
||||||
|
options_number = options->length;
|
||||||
|
ppsz_options[options_number];
|
||||||
|
jstring* jstr_options = elements(options);
|
||||||
|
|
||||||
|
for (jint i = 0; i < options_number; i++) {
|
||||||
|
ppsz_options[i] = (char *) malloc(JvGetStringUTFLength(jstr_options[i]));
|
||||||
|
setString(jstr_options[i], ppsz_options[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return VLC_AddTarget(this->id, (char const *)psz_target, (const char **) ppsz_options, options_number, insertMode, position);
|
||||||
|
}
|
||||||
|
|
||||||
|
jint JVLC::play() {
|
||||||
|
return VLC_Play(this->id);
|
||||||
|
}
|
||||||
|
|
||||||
|
jint JVLC::pause() {
|
||||||
|
return VLC_Pause(this->id);
|
||||||
|
}
|
||||||
|
|
||||||
|
jint JVLC::stop() {
|
||||||
|
return VLC_Stop(this->id);
|
||||||
|
}
|
||||||
|
|
||||||
|
jboolean JVLC::isPlaying() {
|
||||||
|
return VLC_IsPlaying(this->id);
|
||||||
|
}
|
||||||
|
|
||||||
|
jfloat JVLC::getPosition() {
|
||||||
|
return VLC_PositionGet(this->id);
|
||||||
|
}
|
||||||
|
|
||||||
|
jfloat JVLC::setPosition(jfloat position) {
|
||||||
|
return VLC_PositionSet(this->id, position);
|
||||||
|
}
|
||||||
|
|
||||||
|
jint JVLC::getTime() {
|
||||||
|
return VLC_TimeGet(this->id);
|
||||||
|
}
|
||||||
|
|
||||||
|
jint JVLC::setTime(jint seconds, jboolean relative) {
|
||||||
|
return VLC_TimeSet(this->id, seconds, relative);
|
||||||
|
}
|
||||||
|
|
||||||
|
jint JVLC::getLength() {
|
||||||
|
return VLC_LengthGet(this->id);
|
||||||
|
}
|
||||||
|
|
||||||
|
jfloat JVLC::speedFaster() {
|
||||||
|
return VLC_SpeedFaster(this->id);
|
||||||
|
}
|
||||||
|
|
||||||
|
jfloat JVLC::speedSlower() {
|
||||||
|
return VLC_SpeedSlower(this->id);
|
||||||
|
}
|
||||||
|
|
||||||
|
jint JVLC::getPlaylistIndex() {
|
||||||
|
return VLC_PlaylistIndex(this->id);
|
||||||
|
}
|
||||||
|
|
||||||
|
jint JVLC::getPlaylistItems() {
|
||||||
|
return VLC_PlaylistNumberOfItems(this->id);
|
||||||
|
}
|
||||||
|
|
||||||
|
jint JVLC::playlistNext() {
|
||||||
|
return VLC_PlaylistNext(this->id);
|
||||||
|
}
|
||||||
|
|
||||||
|
jint JVLC::playlistPrev() {
|
||||||
|
return VLC_PlaylistPrev(this->id);
|
||||||
|
}
|
||||||
|
|
||||||
|
jint JVLC::playlistClear() {
|
||||||
|
return VLC_PlaylistClear(this->id);
|
||||||
|
}
|
||||||
|
|
||||||
|
jint JVLC::setVolume(jint volume) {
|
||||||
|
return VLC_VolumeSet(this->id, volume);
|
||||||
|
}
|
||||||
|
|
||||||
|
jint JVLC::getVolume() {
|
||||||
|
return VLC_VolumeGet(this->id);
|
||||||
|
}
|
||||||
|
|
||||||
|
jint JVLC::muteVolume() {
|
||||||
|
return VLC_VolumeMute(this->id);
|
||||||
|
}
|
||||||
|
|
||||||
|
jint JVLC::fullScreen() {
|
||||||
|
return VLC_FullScreen(this->id);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* XXX: in progress */
|
||||||
|
::JVLCVariable* JVLC::getVariable(::java::lang::String* varName) {
|
||||||
|
|
||||||
|
char* const psz_var = (char* const) elements( varName->toCharArray());
|
||||||
|
vlc_value_t value;
|
||||||
|
if (VLC_VariableGet(this->id, psz_var, &value) != VLC_SUCCESS) {
|
||||||
|
// throw exception
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This is an helper function to convert jstrings to char*s
|
||||||
|
* setString _assumes_ the char* dest has been allocated
|
||||||
|
* XXX: should return >= 0 on success, < 0 on error
|
||||||
|
*/
|
||||||
|
void setString(jstring orig, char* dest) {
|
||||||
|
jsize chars = JvGetStringUTFRegion(orig, 0, orig->length(), dest);
|
||||||
|
dest[chars] = '\0';
|
||||||
|
}
|
15
bindings/python/Makefile
Normal file
15
bindings/python/Makefile
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
ifdef HOMEDRIVE
|
||||||
|
COMPILERARG = --compiler=mingw32
|
||||||
|
else
|
||||||
|
COMPILERARG =
|
||||||
|
endif
|
||||||
|
|
||||||
|
all:
|
||||||
|
python setup.py build $(COMPILERARG)
|
||||||
|
|
||||||
|
install:
|
||||||
|
python setup.py install
|
||||||
|
|
||||||
|
clean:
|
||||||
|
$(RM) -rf build
|
||||||
|
|
86
bindings/python/setup.py
Normal file
86
bindings/python/setup.py
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
from distutils.core import setup, Extension
|
||||||
|
import os
|
||||||
|
|
||||||
|
def get_vlcconfig():
|
||||||
|
vlcconfig=None
|
||||||
|
for n in ( 'vlc-config',
|
||||||
|
os.path.sep.join( ('..', '..', 'vlc-config' ))):
|
||||||
|
if os.path.exists(n):
|
||||||
|
vlcconfig=n
|
||||||
|
break
|
||||||
|
if vlcconfig is None:
|
||||||
|
print "*** Warning *** Cannot find vlc-config"
|
||||||
|
elif os.sys.platform == 'win32':
|
||||||
|
# Win32 does not know how to invoke the shell itself.
|
||||||
|
vlcconfig="sh %s" % vlcconfig
|
||||||
|
return vlcconfig
|
||||||
|
|
||||||
|
def get_cflags():
|
||||||
|
vlcconfig=get_vlcconfig()
|
||||||
|
if vlcconfig is None:
|
||||||
|
return []
|
||||||
|
else:
|
||||||
|
cflags=os.popen('%s --cflags' % vlcconfig, 'r').readline().rstrip().split()
|
||||||
|
return cflags
|
||||||
|
|
||||||
|
def get_ldflags():
|
||||||
|
vlcconfig=get_vlcconfig()
|
||||||
|
if vlcconfig is None:
|
||||||
|
return []
|
||||||
|
else:
|
||||||
|
os.environ['top_builddir'] = '../..'
|
||||||
|
ldflags=os.popen('%s --libs vlc builtin' % vlcconfig, 'r').readline().rstrip().split()
|
||||||
|
return ldflags
|
||||||
|
|
||||||
|
# To compile in a local vlc tree
|
||||||
|
vlclocal = Extension('vlc',
|
||||||
|
sources = ['vlcglue.c', '../../src/control/init.c'],
|
||||||
|
include_dirs = ['../../include', '../../', '/usr/win32/include' ],
|
||||||
|
extra_objects = [ '../../lib/libvlc.a' ],
|
||||||
|
extra_compile_args = get_cflags(),
|
||||||
|
extra_link_args = [ '-L../..' ] + get_ldflags(),
|
||||||
|
)
|
||||||
|
|
||||||
|
setup (name = 'MediaControl',
|
||||||
|
version = '0.8.2-1',
|
||||||
|
scripts = [ 'vlcdebug.py' ],
|
||||||
|
description = """VLC bindings for python.
|
||||||
|
|
||||||
|
This module provides a MediaControl object, which implements an API
|
||||||
|
inspired from the OMG Audio/Video Stream 1.0 specification. Moreover,
|
||||||
|
the module provides a Object type, which gives a low-level access to
|
||||||
|
the vlc objects and their variables.
|
||||||
|
|
||||||
|
Example session:
|
||||||
|
|
||||||
|
import vlc
|
||||||
|
mc=vlc.MediaControl(['--verbose', '1'])
|
||||||
|
mc.playlist_add_item('movie.mpg')
|
||||||
|
|
||||||
|
# Start the movie at 2000ms
|
||||||
|
p=vlc.Position()
|
||||||
|
p.origin=vlc.RelativePosition
|
||||||
|
p.key=vlc.MediaTime
|
||||||
|
p.value=2000
|
||||||
|
mc.start(p)
|
||||||
|
# which could be abbreviated as
|
||||||
|
# mc.start(2000)
|
||||||
|
# for the default conversion from int is to make a RelativePosition in MediaTime
|
||||||
|
|
||||||
|
# Display some text during 2000ms
|
||||||
|
mc.display_text('Some useless information', 0, 2000)
|
||||||
|
|
||||||
|
# Pause the video
|
||||||
|
mc.pause(0)
|
||||||
|
|
||||||
|
# Get status information
|
||||||
|
mc.get_stream_information()
|
||||||
|
|
||||||
|
# Access lowlevel objets
|
||||||
|
o=vlc.Object(1)
|
||||||
|
o.info()
|
||||||
|
i=o.find_object('input')
|
||||||
|
i.list()
|
||||||
|
i.get('time')
|
||||||
|
""",
|
||||||
|
ext_modules = [ vlclocal ])
|
66
bindings/python/vlcdebug.py
Normal file
66
bindings/python/vlcdebug.py
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
"""Wrapper around vlc module in order to ease the use of vlc.Object
|
||||||
|
class (completion in ipython, access variable as attributes, etc).
|
||||||
|
"""
|
||||||
|
import vlc
|
||||||
|
|
||||||
|
class VLCObject(object):
|
||||||
|
def __init__(self, id):
|
||||||
|
object.__setattr__(self, '_o', vlc.Object(id))
|
||||||
|
|
||||||
|
def find(self, typ):
|
||||||
|
t=self._o.find_object(typ)
|
||||||
|
if t is not None:
|
||||||
|
return VLCObject(t.info()['object-id'])
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
i=self._o.info()
|
||||||
|
return "VLCObject %d (%s) : %s" % (i['object-id'],
|
||||||
|
i['object-type'],
|
||||||
|
i['object-name'])
|
||||||
|
|
||||||
|
def tree(self, prefix=" "):
|
||||||
|
"""Displays the children as a tree."""
|
||||||
|
print prefix, self
|
||||||
|
for i in self._o.children():
|
||||||
|
t=VLCObject(i)
|
||||||
|
t.tree(prefix=prefix + " ")
|
||||||
|
return
|
||||||
|
|
||||||
|
def __getattribute__(self, attr):
|
||||||
|
#print "Getting %s" % attr
|
||||||
|
if attr == '__members__':
|
||||||
|
o=object.__getattribute__(self, '_o')
|
||||||
|
l=dir(o)
|
||||||
|
l.extend([ n.replace('-','_') for n in o.list() ])
|
||||||
|
return l
|
||||||
|
try:
|
||||||
|
return object.__getattribute__ (self, attr)
|
||||||
|
except AttributeError, e:
|
||||||
|
try:
|
||||||
|
return self._o.__getattribute__ (attr)
|
||||||
|
except AttributeError, e:
|
||||||
|
attr=attr.replace('_', '-')
|
||||||
|
if attr in self._o.list():
|
||||||
|
return self._o.get(attr)
|
||||||
|
else:
|
||||||
|
raise e
|
||||||
|
|
||||||
|
def __setattr__(self, name, value):
|
||||||
|
n=name.replace('_', '-')
|
||||||
|
if n in self._o.list():
|
||||||
|
self._o.set(n, value)
|
||||||
|
else:
|
||||||
|
object.__setattr__(self, name, value)
|
||||||
|
|
||||||
|
#mc=vlc.MediaControl()
|
||||||
|
#mc.playlist_add_item('/tmp/k.mpg')
|
||||||
|
#mc.start(0)
|
||||||
|
|
||||||
|
def test():
|
||||||
|
global mc,o
|
||||||
|
mc=vlc.MediaControl()
|
||||||
|
mc.playlist_add_item('/tmp/k.mpg')
|
||||||
|
mc.start(0)
|
||||||
|
o=VLCObject(0)
|
1342
bindings/python/vlcglue.c
Normal file
1342
bindings/python/vlcglue.c
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user