]> git.sesse.net Git - vlc/blobdiff - bindings/python/vlcglue.h
input: Export input_GetState().
[vlc] / bindings / python / vlcglue.h
index 6709c1ac479b77d5d247b8b5939afd88711f1ac3..d6e4c4416588e3dd2cba6f5d65c2572ced1f8115 100644 (file)
@@ -5,7 +5,7 @@
  * $Id$
  *
  * Authors: Olivier Aubert <oaubert at bat710.univ-lyon1.fr>
- *          Clément Stenac <zorglub@videolan.org>
+ *          Clément Stenac <zorglub@videolan.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
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  *****************************************************************************/
+#ifndef _VLCGLUE_H
+#define _VLCGLUE_H 1
 
 #include <Python.h>
 #include "structmember.h"
 
-#define __VLC__
-
 #include <stdio.h>
 #include <vlc/vlc.h>
+#include <vlc/libvlc.h>
 #include <vlc/mediacontrol_structures.h>
 #include <vlc/mediacontrol.h>
 
+/* Python 2.5 64-bit support compatibility define */
+#if PY_VERSION_HEX < 0x02050000 && !defined(PY_SSIZE_T_MIN)
+typedef int Py_ssize_t;
+#define PY_SSIZE_T_MAX INT_MAX
+#define PY_SSIZE_T_MIN INT_MIN
+#endif
+
 #define SELF ((MediaControl*)self)
 
 /**********************************************************************
  * Exceptions handling
  **********************************************************************/
 
-#define MC_TRY exception=mediacontrol_exception_init(exception)
+#define MC_TRY exception=mediacontrol_exception_create( )
 
 #define MC_EXCEPT  \
-  if( exception->code ) { \
+  if( exception && exception->code ) { \
     PyObject *py_exc = MediaControl_InternalException; \
     switch( exception->code ) { \
     case mediacontrol_InternalException: \
     PyErr_SetString( py_exc, exception->message ); \
     mediacontrol_exception_free( exception ); \
     return NULL; \
-  } else { mediacontrol_exception_free( exception ); }
+  } else if( exception ) { mediacontrol_exception_free( exception ); }
 
 PyObject *MediaControl_InternalException;
 PyObject *MediaControl_PositionKeyNotSupported;
 PyObject *MediaControl_PositionOriginNotSupported;
 PyObject *MediaControl_InvalidPosition;
 PyObject *MediaControl_PlaylistException;
+PyObject *vlc_Exception;
 
 /**********************************************************************
- * VLC Object
- **********************************************************************/
-#define VLCSELF ( ( vlcObject* )self )
-
-/**********************************************************************
- * VLCObject Object
+ * vlc.Instance Object
  **********************************************************************/
 typedef struct
 {
     PyObject_HEAD
-    vlc_object_t* p_object;
-    int b_released;
-} vlcObject;
+    libvlc_instance_t* p_instance;
+} vlcInstance;
 
-staticforward PyTypeObject vlcObject_Type;
+#define LIBVLC_INSTANCE ((vlcInstance*)self)
 
 /**********************************************************************
  * MediaControl Object
@@ -95,9 +98,8 @@ typedef struct
 {
     PyObject_HEAD
     mediacontrol_Instance* mc;
-}MediaControl;
-
-staticforward PyTypeObject MediaControl_Type;
+    vlcInstance *vlc_instance;
+} MediaControl;
 
 /**********************************************************************
  * Position Object
@@ -107,12 +109,56 @@ typedef struct
     PyObject_HEAD
     int origin;
     int key;
-    long long value;
+    PY_LONG_LONG value;
 } PyPosition;
 
+/**********************************************************************
+ * vlc.MediaPlayer Object
+ **********************************************************************/
+typedef struct
+{
+    PyObject_HEAD
+    libvlc_media_player_t* p_mp;
+} vlcMediaPlayer;
+
+/**********************************************************************
+ * vlc.Media Object
+ **********************************************************************/
+typedef struct
+{
+    PyObject_HEAD
+    libvlc_media_t* p_media;
+} vlcMedia;
+
+/* Forward declarations */
+staticforward PyTypeObject MediaControl_Type;
 staticforward PyTypeObject PyPosition_Type;
+staticforward PyTypeObject vlcInstance_Type;
+staticforward PyTypeObject vlcMediaPlayer_Type;
+staticforward PyTypeObject vlcMedia_Type;
+
+#define LIBVLC_INSTANCE ((vlcInstance*)self)
+#define LIBVLC_MEDIAPLAYER ((vlcMediaPlayer*)self)
+#define LIBVLC_MEDIA ((vlcMedia*)self)
+
+#define LIBVLC_TRY libvlc_exception_init( &ex );
+
+#define LIBVLC_EXCEPT if( libvlc_exception_raised( &ex ) ) { \
+    PyObject *py_exc = vlc_Exception; \
+    PyErr_SetString( py_exc, libvlc_exception_get_message( &ex ) ); \
+    return NULL; \
+  }
 
 mediacontrol_PositionKey positionKey_py_to_c( PyObject * py_key );
 mediacontrol_PositionOrigin positionOrigin_py_to_c( PyObject * py_origin );
 mediacontrol_Position * position_py_to_c( PyObject * py_position );
 PyPosition * position_c_to_py( mediacontrol_Position * position );
+
+/* Long long conversion on Mac os X/ppc */
+#if defined (__ppc__) || defined(__ppc64__)
+#define ntohll(x) ((long long) x >> 64)
+#else
+#define ntohll(x) (x)
+#endif
+
+#endif