* vlc_instance.c: vlc.Instance binding
*****************************************************************************
* Copyright (C) 2006 the VideoLAN team
- * $Id: $
+ * $Id$
*
* Authors: Olivier Aubert <oaubert at bat710.univ-lyon1.fr>
*
#include "vlcglue.h"
/* Helper functions */
-static int
+static Py_ssize_t
pyoptions_to_args(PyObject *py_options, char*** pppsz_args)
{
- int i_size;
- int i_index;
+ Py_ssize_t i_size;
+ Py_ssize_t i_index;
char** ppsz_args = *pppsz_args;
-
+
ppsz_args = NULL;
Py_INCREF( py_options );
char** ppsz_args = NULL;
int i_size = 0;
- self = PyObject_New( vlcInstance, &vlcInstance_Type );
-
-
if( PyArg_ParseTuple( args, "O", &py_list ) )
{
i_size = pyoptions_to_args( py_list, &ppsz_args );
PyErr_Clear( );
}
+ self = PyObject_New( vlcInstance, &vlcInstance_Type );
+
Py_BEGIN_ALLOW_THREADS
LIBVLC_TRY
LIBVLC_INSTANCE->p_instance = libvlc_new( i_size, ppsz_args, &ex );
static void
vlcInstance_dealloc( PyObject *self )
{
- libvlc_exception_t ex;
- libvlc_destroy( LIBVLC_INSTANCE->p_instance, &ex );
- PyMem_DEL( self );
+ libvlc_release( LIBVLC_INSTANCE->p_instance );
+ PyObject_DEL( self );
}
static PyObject *
return Py_BuildValue( "i", libvlc_get_vlc_id( LIBVLC_INSTANCE->p_instance ) );
}
+/* Set loop variable */
+static PyObject *
+vlcInstance_playlist_loop( PyObject *self, PyObject *args )
+{
+ libvlc_exception_t ex;
+ int i_loop = 0;
+
+ if( !PyArg_ParseTuple( args, "i", &i_loop ) )
+ return NULL;
+
+ LIBVLC_TRY;
+ libvlc_playlist_loop( LIBVLC_INSTANCE->p_instance, i_loop, &ex );
+ LIBVLC_EXCEPT;
+
+ Py_INCREF( Py_None );
+ return Py_None;
+}
+
/* Playlist play. 2 parameters: i_id, the id to play
l_options: a list of options */
static PyObject *
return NULL;
if( py_options )
- {
+ {
i_size = pyoptions_to_args( py_options, &ppsz_args );
}
}
if( py_options )
- {
+ {
i_size = pyoptions_to_args( py_options, &ppsz_args );
}
}
static PyObject *
-vlcInstance_playlist_get_input( PyObject *self, PyObject *args )
+vlcInstance_playlist_get_media_instance( PyObject *self, PyObject *args )
{
libvlc_exception_t ex;
- libvlc_input_t *p_input;
- vlcInput *p_ret;
+ libvlc_media_instance_t *p_mi;
+ vlcMediaInstance *p_ret;
LIBVLC_TRY;
- p_input = libvlc_playlist_get_input( LIBVLC_INSTANCE->p_instance, &ex );
+ p_mi = libvlc_playlist_get_media_instance( LIBVLC_INSTANCE->p_instance, &ex );
LIBVLC_EXCEPT;
- p_ret = PyObject_New( vlcInput, &vlcInput_Type );
- p_ret->p_input = p_input;
+ p_ret = PyObject_New( vlcMediaInstance, &vlcMediaInstance_Type );
+ p_ret->p_mi = p_mi;
Py_INCREF( p_ret ); /* Ah bon ? */
return ( PyObject * )p_ret;
}
return Py_None;
}
+static PyObject *
+vlcInstance_video_get_parent( PyObject *self, PyObject *args )
+{
+ libvlc_exception_t ex;
+ libvlc_drawable_t i_ret;
+
+ LIBVLC_TRY;
+ i_ret = libvlc_video_get_parent( LIBVLC_INSTANCE->p_instance, &ex );
+ LIBVLC_EXCEPT;
+
+ return Py_BuildValue( "L", i_ret );
+}
+
static PyObject *
vlcInstance_video_set_size( PyObject *self, PyObject *args )
{
return NULL;
LIBVLC_TRY;
- libvlc_audio_set_mute( LIBVLC_INSTANCE->p_instance, i_volume, &ex );
+ libvlc_audio_set_volume( LIBVLC_INSTANCE->p_instance, i_volume, &ex );
+ LIBVLC_EXCEPT;
+ Py_INCREF( Py_None );
+ return Py_None;
+}
+
+static PyObject *
+vlcInstance_audio_get_channel( PyObject *self, PyObject *args )
+{
+ libvlc_exception_t ex;
+ int i_ret;
+
+ LIBVLC_TRY;
+ i_ret = libvlc_audio_get_channel( LIBVLC_INSTANCE->p_instance, &ex );
+ LIBVLC_EXCEPT;
+ return Py_BuildValue( "i", i_ret );
+}
+
+static PyObject *
+vlcInstance_audio_set_channel( PyObject *self, PyObject *args )
+{
+ libvlc_exception_t ex;
+ int i_channel;
+
+ if( !PyArg_ParseTuple( args, "i", &i_channel ) )
+ return NULL;
+
+ LIBVLC_TRY;
+ libvlc_audio_set_channel( LIBVLC_INSTANCE->p_instance, i_channel, &ex );
LIBVLC_EXCEPT;
Py_INCREF( Py_None );
return Py_None;
vlcInstance_vlm_add_broadcast( PyObject *self, PyObject *args, PyObject *kwds )
{
libvlc_exception_t ex;
- static char *kwlist[] = { "name", "input", "output",
+ static char *kwlist[] = { "name", "input", "output",
"options", "enable", "loop", NULL};
char* psz_name = NULL;
char* psz_input = NULL;
int i_size = 0;
char** ppsz_args = NULL;
- if( !PyArg_ParseTupleAndKeywords( args, kwds, "sss|Oii", kwlist,
+ if( !PyArg_ParseTupleAndKeywords( args, kwds, "sss|Oii", kwlist,
&psz_name,
- &psz_input, &psz_output,
- &py_options, &i_enable, &i_loop ) )
+ &psz_input, &psz_output,
+ &py_options, &i_enable, &i_loop ) )
return NULL;
-
+
if( py_options )
{
i_size = pyoptions_to_args( py_options, &ppsz_args );
}
-
+
LIBVLC_TRY;
- libvlc_vlm_add_broadcast( LIBVLC_INSTANCE->p_instance,
+ libvlc_vlm_add_broadcast( LIBVLC_INSTANCE->p_instance,
psz_name, psz_input, psz_output,
i_size, ppsz_args, i_enable, i_loop, &ex);
free_args( i_size, ppsz_args );
libvlc_exception_t ex;
char* psz_name;
int i_enabled;
-
+
if( !PyArg_ParseTuple( args, "si", &psz_name, &i_enabled ) )
return NULL;
libvlc_exception_t ex;
char* psz_name;
char* psz_output;
-
+
if( !PyArg_ParseTuple( args, "ss", &psz_name, &psz_output ) )
return NULL;
libvlc_exception_t ex;
char* psz_name;
char* psz_input;
-
+
if( !PyArg_ParseTuple( args, "ss", &psz_name, &psz_input ) )
return NULL;
return Py_None;
}
+static PyObject *
+vlcInstance_vlm_add_input( PyObject *self, PyObject *args )
+{
+ libvlc_exception_t ex;
+ char* psz_name;
+ char* psz_input;
+
+ if( !PyArg_ParseTuple( args, "ss", &psz_name, &psz_input ) )
+ return NULL;
+
+ LIBVLC_TRY;
+ libvlc_vlm_add_input( LIBVLC_INSTANCE->p_instance, psz_name, psz_input, &ex);
+ LIBVLC_EXCEPT;
+ Py_INCREF( Py_None );
+ return Py_None;
+}
+
static PyObject *
vlcInstance_vlm_set_loop( PyObject *self, PyObject *args )
{
libvlc_exception_t ex;
char* psz_name;
int i_loop;
-
+
if( !PyArg_ParseTuple( args, "si", &psz_name, &i_loop ) )
return NULL;
vlcInstance_vlm_change_media( PyObject *self, PyObject *args, PyObject *kwds )
{
libvlc_exception_t ex;
- static char *kwlist[] = { "name", "input", "output",
+ static char *kwlist[] = { "name", "input", "output",
"options", "enable", "loop", NULL};
char* psz_name = NULL;
char* psz_input = NULL;
int i_size = 0;
char** ppsz_args = NULL;
- if( !PyArg_ParseTupleAndKeywords( args, kwds, "sss|Oii", kwlist,
+ if( !PyArg_ParseTupleAndKeywords( args, kwds, "sss|Oii", kwlist,
&psz_name,
- &psz_input, &psz_output,
- &py_options, &i_enable, &i_loop ) )
+ &psz_input, &psz_output,
+ &py_options, &i_enable, &i_loop ) )
return NULL;
-
+
if( py_options )
{
i_size = pyoptions_to_args( py_options, &ppsz_args );
}
-
+
LIBVLC_TRY;
- libvlc_vlm_change_media( LIBVLC_INSTANCE->p_instance,
+ libvlc_vlm_change_media( LIBVLC_INSTANCE->p_instance,
psz_name, psz_input, psz_output,
i_size, ppsz_args, i_enable, i_loop, &ex);
free_args( i_size, ppsz_args );
{
libvlc_exception_t ex;
char* psz_name;
-
+
if( !PyArg_ParseTuple( args, "s", &psz_name ) )
return NULL;
{
libvlc_exception_t ex;
char* psz_name;
-
+
if( !PyArg_ParseTuple( args, "s", &psz_name ) )
return NULL;
{
libvlc_exception_t ex;
char* psz_name;
-
+
if( !PyArg_ParseTuple( args, "s", &psz_name ) )
return NULL;
return Py_None;
}
+static PyObject *
+vlcInstance_vlm_seek_media( PyObject *self, PyObject *args )
+{
+ libvlc_exception_t ex;
+ char* psz_name;
+ float f_percentage;
+
+ if( !PyArg_ParseTuple( args, "sf", &psz_name, &f_percentage ) )
+ return NULL;
+
+ LIBVLC_TRY;
+ libvlc_vlm_seek_media( LIBVLC_INSTANCE->p_instance, psz_name, f_percentage, &ex);
+ LIBVLC_EXCEPT;
+ Py_INCREF( Py_None );
+ return Py_None;
+}
+
+static PyObject *
+vlcInstance_vlm_show_media( PyObject *self, PyObject *args )
+{
+ libvlc_exception_t ex;
+ char* psz_name;
+ char* psz_ret;
+ PyObject* o_ret;
+
+ if( !PyArg_ParseTuple( args, "s", &psz_name ) )
+ return NULL;
+ LIBVLC_TRY;
+ psz_ret = libvlc_vlm_show_media( LIBVLC_INSTANCE->p_instance, psz_name, &ex );
+ LIBVLC_EXCEPT;
+ o_ret = Py_BuildValue( "s", psz_ret );
+ free( psz_ret );
+ return o_ret;
+}
+
+static PyObject *
+vlcInstance_media_descriptor_new( PyObject *self, PyObject *args )
+{
+ libvlc_exception_t ex;
+ libvlc_media_descriptor_t *p_md;
+ char* psz_mrl = NULL;
+ vlcMediaDescriptor *p_ret;
+
+ if( !PyArg_ParseTuple( args, "s", &psz_mrl ) )
+ return NULL;
+
+ LIBVLC_TRY;
+ p_md = libvlc_media_descriptor_new( LIBVLC_INSTANCE->p_instance, psz_mrl, &ex );
+ LIBVLC_EXCEPT;
+
+ p_ret = PyObject_New( vlcMediaDescriptor, &vlcMediaDescriptor_Type );
+ p_ret->p_md = p_md;
+ Py_INCREF( p_ret ); /* Ah bon ? */
+ return ( PyObject * )p_ret;
+}
+
/* Method table */
static PyMethodDef vlcInstance_methods[] =
{
{ "get_vlc_id", vlcInstance_get_vlc_id, METH_VARARGS,
"get_vlc_id( ) -> int Get the instance id."},
+ { "playlist_loop", vlcInstance_playlist_loop, METH_VARARGS,
+ "playlist_loop(bool) Set loop variable" },
{ "playlist_play", vlcInstance_playlist_play, METH_VARARGS,
"playlist_play(id=int, options=list) Play the given playlist item (-1 for current item) with optional options (a list of strings)" },
{ "playlist_pause", vlcInstance_playlist_pause, METH_VARARGS,
"playlist_add(mrl=str, name=str, options=list) -> int Add a new item to the playlist. options is a list of strings."},
{ "playlist_delete_item", vlcInstance_playlist_delete_item, METH_VARARGS,
"playlist_delete_item(id=int) Delete the given item"},
- { "playlist_get_input", vlcInstance_playlist_get_input, METH_VARARGS,
- "playlist_get_input() -> object Return the current input"},
+ { "playlist_get_media_instance", vlcInstance_playlist_get_media_instance, METH_VARARGS,
+ "playlist_get_media_instance() -> object Return the current media instance"},
{ "video_set_parent", vlcInstance_video_set_parent, METH_VARARGS,
- "video_set_parent(xid=int) Set the parent xid or HWND"},
+ "video_set_parent(xid=int) Set the parent xid/HWND/CGrafPort"},
+ { "video_get_parent", vlcInstance_video_get_parent, METH_VARARGS,
+ "video_get_parent(xid=int) Get the parent xid/HWND/CGrafPort"},
{ "video_set_size", vlcInstance_video_set_size, METH_VARARGS,
"video_set_size(width=int, height=int) Set the video width and height"},
{ "audio_toggle_mute", vlcInstance_audio_toggle_mute, METH_VARARGS,
"audio_get_volume() -> int Get the audio volume"},
{ "audio_set_volume", vlcInstance_audio_set_volume, METH_VARARGS,
"audio_set_volume(volume=int) Set the audio volume"},
+ { "audio_get_channel", vlcInstance_audio_get_channel, METH_VARARGS,
+ "audio_get_channel() -> int Get current audio channel" },
+ { "audio_set_channel", vlcInstance_audio_set_channel, METH_VARARGS,
+ "audio_set_channel(int) Set current audio channel" },
+
+ { "media_descriptor_new", vlcInstance_media_descriptor_new, METH_VARARGS,
+ "media_descriptor_new(str) -> object Create a media descriptor with the given mrl."},
{ "vlm_add_broadcast", vlcInstance_vlm_add_broadcast, METH_VARARGS | METH_KEYWORDS,
"vlm_add_broadcast(name=str, input=str, output=str, options=list, enable=int, loop=int) Add a new broadcast" },
"vlm_set_output(name=str, output=str) Set the output" },
{ "vlm_set_input", vlcInstance_vlm_set_input, METH_VARARGS,
"vlm_set_input(name=str, output=str) Set the input" },
+ { "vlm_add_input", vlcInstance_vlm_add_input, METH_VARARGS,
+ "vlm_add_input(name=str, output=str) Add a media's input MRL" },
{ "vlm_set_loop", vlcInstance_vlm_set_loop, METH_VARARGS,
"vlm_set_loop(name=str, loop=int) Change the looping value" },
{ "vlm_change_media", vlcInstance_vlm_change_media, METH_VARARGS | METH_KEYWORDS,
"vlm_change_media(name=str, input=str, output=str, options=list, enable=int, loop=int) Change the broadcast parameters" },
{ "vlm_play_media", vlcInstance_vlm_play_media, METH_VARARGS,
- "vlm_play_media(name=str)" },
+ "vlm_play_media(name=str) Plays the named broadcast." },
{ "vlm_stop_media", vlcInstance_vlm_stop_media, METH_VARARGS,
- "vlm_stop_media(name=str)" },
+ "vlm_stop_media(name=str) Stops the named broadcast." },
{ "vlm_pause_media", vlcInstance_vlm_pause_media, METH_VARARGS,
- "vlm_pause_media(name=str)" },
+ "vlm_pause_media(name=str) Pauses the named broadcast." },
+ { "vlm_seek_media", vlcInstance_vlm_seek_media, METH_VARARGS,
+ "vlm_seek_media(name=str, percentage=float) Seeks in the named broadcast." },
+ { "vlm_show_media", vlcInstance_vlm_show_media, METH_VARARGS,
+ "vlm_show_media(name=str) Return information of the named broadcast." },
{ NULL, NULL, 0, NULL },
};
0, /*tp_setattro*/
0, /*tp_as_buffer*/
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /*tp_flags*/
- "VLC Instance.", /* tp_doc */
+ "VLC Instance(args)\n\nNote: if args is specified, the first arg is interpreted as an executable name to get the directory of the VLC plugins.", /* tp_doc */
0, /* tp_traverse */
0, /* tp_clear */
0, /* tp_richcompare */