]> git.sesse.net Git - vlc/blob - bindings/python/vlc_module.c
vlc_object.c has been deleted in [18517]
[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 #include "vlcglue.h"
25
26 /**************************************************************************
27  * VLC Module
28  **************************************************************************/
29
30 #ifndef vlcMODINIT_FUNC /* declarations for DLL import/export */
31 #define vlcMODINIT_FUNC void
32 #endif
33
34 static PyMethodDef vlc_methods[] = {
35     { NULL }  /* Sentinel */
36 };
37
38 /* Module globals */
39 PyObject* MediaControl_InternalException          = NULL;
40 PyObject* MediaControl_PositionKeyNotSupported    = NULL;
41 PyObject *MediaControl_PositionOriginNotSupported = NULL;
42 PyObject* MediaControl_InvalidPosition            = NULL;
43 PyObject *MediaControl_PlaylistException          = NULL;
44
45 vlcMODINIT_FUNC
46 initvlc( void )
47 {
48     PyObject* p_module;
49
50     PyPosition_Type.tp_new = PyType_GenericNew;
51     PyPosition_Type.tp_alloc = PyType_GenericAlloc;
52
53     vlcInput_Type.tp_new = PyType_GenericNew;
54     vlcInput_Type.tp_alloc = PyType_GenericAlloc;
55
56     p_module = Py_InitModule3( "vlc", vlc_methods,
57                                "VLC media player embedding module." );
58
59     if( !p_module )
60       return;
61
62     if( PyType_Ready( &PyPosition_Type ) < 0 )
63         return;
64     if( PyType_Ready( &MediaControl_Type ) < 0 )
65         return;
66     if( PyType_Ready( &vlcInstance_Type ) < 0 )
67         return;
68     if( PyType_Ready( &vlcInput_Type ) < 0 )
69         return;
70
71     /* Exceptions */
72     MediaControl_InternalException =
73             PyErr_NewException( "vlc.InternalException", NULL, NULL );
74     Py_INCREF( MediaControl_InternalException );
75     PyModule_AddObject( p_module, "InternalException",
76                         MediaControl_InternalException );
77
78     MediaControl_PositionKeyNotSupported =
79             PyErr_NewException( "vlc.PositionKeyNotSupported", NULL, NULL );
80     Py_INCREF( MediaControl_PositionKeyNotSupported );
81     PyModule_AddObject( p_module, "PositionKeyNotSupported",
82                         MediaControl_PositionKeyNotSupported );
83
84     MediaControl_PositionOriginNotSupported=
85             PyErr_NewException( "vlc.InvalidPosition", NULL, NULL );
86     Py_INCREF( MediaControl_PositionOriginNotSupported );
87     PyModule_AddObject( p_module, "PositionOriginNotSupported",
88                         MediaControl_PositionOriginNotSupported );
89
90     MediaControl_InvalidPosition =
91             PyErr_NewException( "vlc.InvalidPosition", NULL, NULL );
92     Py_INCREF( MediaControl_InvalidPosition );
93     PyModule_AddObject( p_module, "InvalidPosition",
94                         MediaControl_InvalidPosition );
95
96     MediaControl_PlaylistException =
97             PyErr_NewException( "vlc.PlaylistException", NULL, NULL );
98     Py_INCREF( MediaControl_PlaylistException );
99     PyModule_AddObject( p_module, "PlaylistException",
100                         MediaControl_PlaylistException );
101
102     /* Exceptions */
103     vlcInstance_Exception =
104         PyErr_NewException( "vlc.InstanceException", NULL, NULL );
105     Py_INCREF( vlcInstance_Exception );
106     PyModule_AddObject( p_module, "InstanceException",
107                         vlcInstance_Exception );
108
109     /* Types */
110     Py_INCREF( &PyPosition_Type );
111     PyModule_AddObject( p_module, "Position",
112                         ( PyObject * )&PyPosition_Type );
113
114     Py_INCREF( &MediaControl_Type );
115     PyModule_AddObject( p_module, "MediaControl",
116                         ( PyObject * )&MediaControl_Type );
117
118     Py_INCREF( &vlcInstance_Type );
119     PyModule_AddObject( p_module, "Instance",
120                         ( PyObject * )&vlcInstance_Type );
121     Py_INCREF( &vlcInput_Type );
122     PyModule_AddObject( p_module, "Input",
123                         ( PyObject * )&vlcInput_Type );
124
125     /* Constants */
126     PyModule_AddIntConstant( p_module, "AbsolutePosition",
127                              mediacontrol_AbsolutePosition );
128     PyModule_AddIntConstant( p_module, "RelativePosition",
129                              mediacontrol_RelativePosition );
130     PyModule_AddIntConstant( p_module, "ModuloPosition",
131                              mediacontrol_ModuloPosition );
132
133     PyModule_AddIntConstant( p_module, "ByteCount",
134                              mediacontrol_ByteCount );
135     PyModule_AddIntConstant( p_module, "SampleCount",
136                              mediacontrol_SampleCount );
137     PyModule_AddIntConstant( p_module, "MediaTime",
138                              mediacontrol_MediaTime );
139     PyModule_AddIntConstant( p_module, "PlayingStatus",
140                              mediacontrol_PlayingStatus );
141     PyModule_AddIntConstant( p_module, "PauseStatus",
142                              mediacontrol_PauseStatus );
143     PyModule_AddIntConstant( p_module, "ForwardStatus",
144                              mediacontrol_ForwardStatus );
145     PyModule_AddIntConstant( p_module, "BackwardStatus",
146                              mediacontrol_BackwardStatus );
147     PyModule_AddIntConstant( p_module, "InitStatus",
148                              mediacontrol_InitStatus );
149     PyModule_AddIntConstant( p_module, "EndStatus",
150                              mediacontrol_EndStatus );
151     PyModule_AddIntConstant( p_module, "UndefinedStatus",
152                              mediacontrol_UndefinedStatus );
153 }
154
155
156 /* Make libpostproc happy... */
157 void * fast_memcpy( void * to, const void * from, size_t len )
158 {
159   return memcpy( to, from, len );
160 }
161
162 /* Horrible hack... Please do not look.  Temporary workaround for the
163    forward declaration mess of python types (cf vlcglue.h). If we do a
164    separate compilation, we have to declare some types as extern. But
165    the recommended way to forward declare types in python is
166    static... I am sorting the mess but in the meantime, this will
167    produce a working python module.
168 */
169 #include "vlc_mediacontrol.c"
170 #include "vlc_position.c"
171 #include "vlc_instance.c"
172 #include "vlc_input.c"