]> git.sesse.net Git - vlc/blob - bindings/python/vlc_module.c
ba2fd32c50aeaef7a581309f92fba2731a6ccd64
[vlc] / bindings / python / vlc_module.c
1 /*****************************************************************************
2  * vlc_module.c: vlc python binding module
3  *****************************************************************************
4  * Copyright (C) 2006 the VideoLAN team
5  * $Id: $
6  *
7  * Authors: Olivier Aubert <oaubert at bat710.univ-lyon1.fr>
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software
21  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
22  *****************************************************************************/
23
24 /* We need to access some internal features of VLC (for vlc_object) */
25 #define __VLC__
26
27
28 #include "vlcglue.h"
29
30 /**************************************************************************
31  * VLC Module
32  **************************************************************************/
33
34 #ifndef vlcMODINIT_FUNC /* declarations for DLL import/export */
35 #define vlcMODINIT_FUNC void
36 #endif
37
38 static PyMethodDef vlc_methods[] = {
39     { NULL }  /* Sentinel */
40 };
41
42 /* Module globals */
43 PyObject* MediaControl_InternalException          = NULL;
44 PyObject* MediaControl_PositionKeyNotSupported    = NULL;
45 PyObject *MediaControl_PositionOriginNotSupported = NULL;
46 PyObject* MediaControl_InvalidPosition            = NULL;
47 PyObject *MediaControl_PlaylistException          = NULL;
48
49 vlcMODINIT_FUNC
50 initvlc( void )
51 {
52     PyObject* p_module;
53
54     PyPosition_Type.tp_new = PyType_GenericNew;
55     PyPosition_Type.tp_alloc = PyType_GenericAlloc;
56
57     vlcInput_Type.tp_new = PyType_GenericNew;
58     vlcInput_Type.tp_alloc = PyType_GenericAlloc;
59
60     p_module = Py_InitModule3( "vlc", vlc_methods,
61                                "VLC media player embedding module." );
62
63     if( !p_module )
64       return;
65
66     if( PyType_Ready( &PyPosition_Type ) < 0 )
67         return;
68     if( PyType_Ready( &MediaControl_Type ) < 0 )
69         return;
70     if( PyType_Ready( &vlcObject_Type ) < 0 )
71         return;
72     if( PyType_Ready( &vlcInstance_Type ) < 0 )
73         return;
74     if( PyType_Ready( &vlcInput_Type ) < 0 )
75         return;
76
77     /* Exceptions */
78     MediaControl_InternalException =
79             PyErr_NewException( "vlc.InternalException", NULL, NULL );
80     Py_INCREF( MediaControl_InternalException );
81     PyModule_AddObject( p_module, "InternalException",
82                         MediaControl_InternalException );
83
84     MediaControl_PositionKeyNotSupported =
85             PyErr_NewException( "vlc.PositionKeyNotSupported", NULL, NULL );
86     Py_INCREF( MediaControl_PositionKeyNotSupported );
87     PyModule_AddObject( p_module, "PositionKeyNotSupported",
88                         MediaControl_PositionKeyNotSupported );
89
90     MediaControl_PositionOriginNotSupported=
91             PyErr_NewException( "vlc.InvalidPosition", NULL, NULL );
92     Py_INCREF( MediaControl_PositionOriginNotSupported );
93     PyModule_AddObject( p_module, "PositionOriginNotSupported",
94                         MediaControl_PositionOriginNotSupported );
95
96     MediaControl_InvalidPosition =
97             PyErr_NewException( "vlc.InvalidPosition", NULL, NULL );
98     Py_INCREF( MediaControl_InvalidPosition );
99     PyModule_AddObject( p_module, "InvalidPosition",
100                         MediaControl_InvalidPosition );
101
102     MediaControl_PlaylistException =
103             PyErr_NewException( "vlc.PlaylistException", NULL, NULL );
104     Py_INCREF( MediaControl_PlaylistException );
105     PyModule_AddObject( p_module, "PlaylistException",
106                         MediaControl_PlaylistException );
107
108     /* Exceptions */
109     vlcInstance_Exception =
110         PyErr_NewException( "vlc.InstanceException", NULL, NULL );
111     Py_INCREF( vlcInstance_Exception );
112     PyModule_AddObject( p_module, "InstanceException",
113                         vlcInstance_Exception );
114
115     /* Types */
116     Py_INCREF( &PyPosition_Type );
117     PyModule_AddObject( p_module, "Position",
118                         ( PyObject * )&PyPosition_Type );
119
120     Py_INCREF( &MediaControl_Type );
121     PyModule_AddObject( p_module, "MediaControl",
122                         ( PyObject * )&MediaControl_Type );
123
124     Py_INCREF( &vlcObject_Type );
125     PyModule_AddObject( p_module, "Object",
126                         ( PyObject * )&vlcObject_Type );
127     Py_INCREF( &vlcInstance_Type );
128     PyModule_AddObject( p_module, "Instance",
129                         ( PyObject * )&vlcInstance_Type );
130     Py_INCREF( &vlcInput_Type );
131     PyModule_AddObject( p_module, "Input",
132                         ( PyObject * )&vlcInput_Type );
133
134     /* Constants */
135     PyModule_AddIntConstant( p_module, "AbsolutePosition",
136                              mediacontrol_AbsolutePosition );
137     PyModule_AddIntConstant( p_module, "RelativePosition",
138                              mediacontrol_RelativePosition );
139     PyModule_AddIntConstant( p_module, "ModuloPosition",
140                              mediacontrol_ModuloPosition );
141
142     PyModule_AddIntConstant( p_module, "ByteCount",
143                              mediacontrol_ByteCount );
144     PyModule_AddIntConstant( p_module, "SampleCount",
145                              mediacontrol_SampleCount );
146     PyModule_AddIntConstant( p_module, "MediaTime",
147                              mediacontrol_MediaTime );
148     PyModule_AddIntConstant( p_module, "PlayingStatus",
149                              mediacontrol_PlayingStatus );
150     PyModule_AddIntConstant( p_module, "PauseStatus",
151                              mediacontrol_PauseStatus );
152     PyModule_AddIntConstant( p_module, "ForwardStatus",
153                              mediacontrol_ForwardStatus );
154     PyModule_AddIntConstant( p_module, "BackwardStatus",
155                              mediacontrol_BackwardStatus );
156     PyModule_AddIntConstant( p_module, "InitStatus",
157                              mediacontrol_InitStatus );
158     PyModule_AddIntConstant( p_module, "EndStatus",
159                              mediacontrol_EndStatus );
160     PyModule_AddIntConstant( p_module, "UndefinedStatus",
161                              mediacontrol_UndefinedStatus );
162 }
163
164
165 /* Make libpostproc happy... */
166 void * fast_memcpy( void * to, const void * from, size_t len )
167 {
168   return memcpy( to, from, len );
169 }
170
171 /* Horrible hack... Please do not look.  Temporary workaround for the
172    forward declaration mess of python types (cf vlcglue.h). If we do a
173    separate compilation, we have to declare some types as extern. But
174    the recommended way to forward declare types in python is
175    static... I am sorting the mess but in the meantime, this will
176    produce a working python module.
177 */
178 #include "vlc_mediacontrol.c"
179 #include "vlc_position.c"
180 #include "vlc_instance.c"
181 #include "vlc_input.c"
182 #include "vlc_object.c"