X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=bindings%2Fpython%2Fvlcglue.h;h=d6e4c4416588e3dd2cba6f5d65c2572ced1f8115;hb=241b22807f106a1473add93ed0d8efdc9108e4bc;hp=61265412e2204860728435c63288daa0019a8a94;hpb=1fb54fc49d803b13021310bbacaebd8b9804088f;p=vlc diff --git a/bindings/python/vlcglue.h b/bindings/python/vlcglue.h index 61265412e2..d6e4c44165 100644 --- a/bindings/python/vlcglue.h +++ b/bindings/python/vlcglue.h @@ -5,7 +5,7 @@ * $Id$ * * Authors: Olivier Aubert - * Clément Stenac + * Clément Stenac * * 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 @@ -19,18 +19,26 @@ * * 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. + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ +#ifndef _VLCGLUE_H +#define _VLCGLUE_H 1 #include #include "structmember.h" -#define __VLC__ - #include #include -#include -#include +#include +#include +#include + +/* 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) @@ -38,10 +46,10 @@ * 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: \ @@ -63,30 +71,25 @@ 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