]> git.sesse.net Git - vlc/blobdiff - bindings/python/vlc_instance.c
Remove useless test (one more time).
[vlc] / bindings / python / vlc_instance.c
index 1e419644390e7ea700e290680288ff7eb2a0b912..332eb2655970ff76d8c72e3f38ef39ace21301b9 100644 (file)
@@ -2,7 +2,7 @@
  * 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 );
@@ -64,8 +64,7 @@ free_args(int i_size, char** ppsz_args)
     int i_index;
 
     for ( i_index = 0; i_index < i_size; i_index++ )
-        if( ppsz_args[i_index] )
-            free(ppsz_args[i_index]);
+        free( ppsz_args[i_index] );
     free( ppsz_args );
 }
 
@@ -82,9 +81,6 @@ vlcInstance_new( PyTypeObject *type, PyObject *args, PyObject *kwds )
     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 );
@@ -98,6 +94,8 @@ vlcInstance_new( PyTypeObject *type, PyObject *args, PyObject *kwds )
         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 );
@@ -112,9 +110,8 @@ vlcInstance_new( PyTypeObject *type, PyObject *args, PyObject *kwds )
 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 *
@@ -123,6 +120,24 @@ vlcInstance_get_vlc_id( PyObject *self, PyObject *args )
     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 *
@@ -138,7 +153,7 @@ vlcInstance_playlist_play( PyObject *self, PyObject *args )
         return NULL;
 
     if( py_options )
-    {        
+    {
         i_size = pyoptions_to_args( py_options, &ppsz_args );
     }
 
@@ -253,7 +268,7 @@ vlcInstance_playlist_add( PyObject *self, PyObject *args)
     }
 
     if( py_options )
-    {        
+    {
         i_size = pyoptions_to_args( py_options, &ppsz_args );
     }
 
@@ -298,18 +313,18 @@ vlcInstance_playlist_delete_item( PyObject *self, PyObject *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;
 }
@@ -331,6 +346,19 @@ vlcInstance_video_set_parent( PyObject *self, PyObject *args )
     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 )
 {
@@ -410,7 +438,35 @@ vlcInstance_audio_set_volume( 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;
@@ -422,7 +478,7 @@ static PyObject *
 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;
@@ -433,19 +489,19 @@ vlcInstance_vlm_add_broadcast( PyObject *self, PyObject *args, PyObject *kwds )
     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 );
@@ -476,7 +532,7 @@ vlcInstance_vlm_set_enabled( PyObject *self, PyObject *args )
     libvlc_exception_t ex;
     char* psz_name;
     int i_enabled;
-    
     if( !PyArg_ParseTuple( args, "si", &psz_name, &i_enabled ) )
         return NULL;
 
@@ -493,7 +549,7 @@ vlcInstance_vlm_set_output( PyObject *self, PyObject *args )
     libvlc_exception_t ex;
     char* psz_name;
     char* psz_output;
-    
     if( !PyArg_ParseTuple( args, "ss", &psz_name, &psz_output ) )
         return NULL;
 
@@ -510,7 +566,7 @@ vlcInstance_vlm_set_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;
 
@@ -521,13 +577,30 @@ vlcInstance_vlm_set_input( PyObject *self, PyObject *args )
     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;
 
@@ -542,7 +615,7 @@ static PyObject *
 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;
@@ -553,19 +626,19 @@ vlcInstance_vlm_change_media( PyObject *self, PyObject *args, PyObject *kwds )
     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 );
@@ -579,7 +652,7 @@ vlcInstance_vlm_play_media( PyObject *self, PyObject *args )
 {
     libvlc_exception_t ex;
     char* psz_name;
-    
     if( !PyArg_ParseTuple( args, "s", &psz_name ) )
         return NULL;
 
@@ -595,7 +668,7 @@ vlcInstance_vlm_stop_media( PyObject *self, PyObject *args )
 {
     libvlc_exception_t ex;
     char* psz_name;
-    
+
     if( !PyArg_ParseTuple( args, "s", &psz_name ) )
         return NULL;
 
@@ -611,7 +684,7 @@ vlcInstance_vlm_pause_media( PyObject *self, PyObject *args )
 {
     libvlc_exception_t ex;
     char* psz_name;
-    
     if( !PyArg_ParseTuple( args, "s", &psz_name ) )
         return NULL;
 
@@ -622,11 +695,69 @@ vlcInstance_vlm_pause_media( PyObject *self, PyObject *args )
     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,
@@ -647,10 +778,12 @@ static PyMethodDef vlcInstance_methods[] =
       "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,
@@ -663,6 +796,13 @@ static PyMethodDef vlcInstance_methods[] =
       "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" },
@@ -674,16 +814,22 @@ static PyMethodDef vlcInstance_methods[] =
       "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 },
 };