summaryrefslogtreecommitdiff
path: root/gst/gstmodule.c
diff options
context:
space:
mode:
Diffstat (limited to 'gst/gstmodule.c')
-rw-r--r--gst/gstmodule.c366
1 files changed, 192 insertions, 174 deletions
diff --git a/gst/gstmodule.c b/gst/gstmodule.c
index 49d2f79..b85d0d6 100644
--- a/gst/gstmodule.c
+++ b/gst/gstmodule.c
@@ -34,14 +34,14 @@
#include <locale.h>
-void pygst_register_classes (PyObject *d);
-void pygst_add_constants(PyObject *module, const gchar *strip_prefix);
-void _pygst_register_boxed_types(PyObject *moddict);
-
+void pygst_register_classes (PyObject * d);
+void pygst_add_constants (PyObject * module, const gchar * strip_prefix);
+void _pygst_register_boxed_types (PyObject * moddict);
+
extern PyMethodDef pygst_functions[];
-GST_DEBUG_CATEGORY (pygst_debug); /* for bindings code */
-GST_DEBUG_CATEGORY (python_debug); /* for python code */
+GST_DEBUG_CATEGORY (pygst_debug); /* for bindings code */
+GST_DEBUG_CATEGORY (python_debug); /* for python code */
/* copied from pygtk to register GType */
#define REGISTER_TYPE(d, type, name) \
@@ -58,200 +58,218 @@ GST_DEBUG_CATEGORY (python_debug); /* for python code */
o=pyg_type_wrapper_new(gtype)); \
Py_DECREF(o);
-static PyObject*
-pygstminiobject_from_gvalue(const GValue *value)
+static PyObject *
+pygstminiobject_from_gvalue (const GValue * value)
{
- GstMiniObject *miniobj;
+ GstMiniObject *miniobj;
- if ((miniobj = gst_value_get_mini_object (value)) == NULL) {
- Py_INCREF(Py_None);
- return Py_None;
- }
- return pygstminiobject_new(miniobj);
+ if ((miniobj = gst_value_get_mini_object (value)) == NULL) {
+ Py_INCREF (Py_None);
+ return Py_None;
+ }
+ return pygstminiobject_new (miniobj);
}
static int
-pygstminiobject_to_gvalue(GValue *value, PyObject *obj)
+pygstminiobject_to_gvalue (GValue * value, PyObject * obj)
{
- PyGstMiniObject *self = (PyGstMiniObject*) obj;
+ PyGstMiniObject *self = (PyGstMiniObject *) obj;
- gst_value_set_mini_object(value, self->obj);
- return 0;
+ gst_value_set_mini_object (value, self->obj);
+ return 0;
}
static void
-sink_gstobject(GObject *object)
+sink_gstobject (GObject * object)
{
- if (GST_OBJECT_IS_FLOATING(object)) {
- g_object_ref(object);
- gst_object_sink(GST_OBJECT(object));
- }
+ if (GST_OBJECT_IS_FLOATING (object)) {
+ g_object_ref (object);
+ gst_object_sink (GST_OBJECT (object));
+ }
}
-DL_EXPORT(void)
+DL_EXPORT (void)
init_gst (void)
{
- PyObject *m, *d;
- PyObject *av, *tuple;
- int argc, i;
- guint major, minor, micro, nano;
- char **argv;
- GError *error = NULL;
-
- init_pygobject ();
-
- /* pull in arguments */
- av = PySys_GetObject ("argv");
- if (av != NULL) {
- argc = PyList_Size (av);
- argv = g_new (char *, argc);
- for (i = 0; i < argc; i++)
- argv[i] = g_strdup (PyString_AsString (PyList_GetItem (av, i)));
- } else {
- /* gst_init_check does not like argc == 0 */
- argc = 1;
- argv = g_new (char *, argc);
- argv[0] = g_strdup("");
- }
- if (!gst_init_check (&argc, &argv, &error)) {
- gchar *errstr;
-
- if (argv != NULL) {
- for (i = 0; i < argc; i++)
- g_free (argv[i]);
- g_free (argv);
- }
- errstr = g_strdup_printf ("can't initialize module gst: %s",
- error ? GST_STR_NULL (error->message) : "no error given");
- PyErr_SetString (PyExc_RuntimeError, errstr);
- g_free (errstr);
- g_error_free (error);
- setlocale(LC_NUMERIC, "C");
- return;
- }
-
- setlocale(LC_NUMERIC, "C");
- if (argv != NULL) {
- PySys_SetArgv (argc, argv);
- for (i = 0; i < argc; i++)
- g_free (argv[i]);
- g_free (argv);
- }
-
- /* Initialize debugging category */
- GST_DEBUG_CATEGORY_INIT (pygst_debug, "pygst", 0, "GStreamer python bindings");
- GST_DEBUG_CATEGORY_INIT (python_debug, "python",
- GST_DEBUG_FG_GREEN, "python code using gst-python");
-
- pygobject_register_sinkfunc(GST_TYPE_OBJECT, sink_gstobject);
-
- m = Py_InitModule ("_gst", pygst_functions);
- d = PyModule_GetDict (m);
-
- /* gst version */
- gst_version(&major, &minor, &micro, &nano);
- tuple = Py_BuildValue("(iii)", major, minor, micro);
- PyDict_SetItemString(d, "gst_version", tuple);
- Py_DECREF(tuple);
-
- /* gst-python version */
- tuple = Py_BuildValue ("(iii)", PYGST_MAJOR_VERSION, PYGST_MINOR_VERSION,
- PYGST_MICRO_VERSION);
- PyDict_SetItemString(d, "pygst_version", tuple);
- Py_DECREF(tuple);
-
- /* clock stuff */
- PyModule_AddIntConstant(m, "SECOND", GST_SECOND);
- PyModule_AddIntConstant(m, "MSECOND", GST_MSECOND);
- PyModule_AddIntConstant(m, "NSECOND", GST_NSECOND);
-
- PyModule_AddObject(m, "CLOCK_TIME_NONE", PyLong_FromUnsignedLongLong(GST_CLOCK_TIME_NONE));
- PyModule_AddObject(m, "BUFFER_OFFSET_NONE", PyLong_FromUnsignedLongLong(GST_BUFFER_OFFSET_NONE));
-
- pygst_exceptions_register_classes (d);
-
- REGISTER_TYPE(d, PyGstIterator_Type, "Iterator");
-
-
- pygstminiobject_register_class(d, "GstMiniObject", GST_TYPE_MINI_OBJECT,
- &PyGstMiniObject_Type, NULL);
- pyg_register_boxed_custom(GST_TYPE_MINI_OBJECT,
- pygstminiobject_from_gvalue,
- pygstminiobject_to_gvalue);
-
- pygst_register_classes (d);
- pygst_add_constants (m, "GST_");
-
- /* make our types available */
- PyModule_AddObject (m, "TYPE_ELEMENT_FACTORY",
- pyg_type_wrapper_new(GST_TYPE_ELEMENT_FACTORY));
- PyModule_AddObject (m, "TYPE_INDEX_FACTORY",
- pyg_type_wrapper_new(GST_TYPE_INDEX_FACTORY));
- PyModule_AddObject (m, "TYPE_TYPE_FIND_FACTORY",
- pyg_type_wrapper_new(GST_TYPE_TYPE_FIND_FACTORY));
-
- /* GStreamer core tags */
- PyModule_AddStringConstant (m, "TAG_TITLE", GST_TAG_TITLE);
- PyModule_AddStringConstant (m, "TAG_ARTIST", GST_TAG_ARTIST);
- PyModule_AddStringConstant (m, "TAG_ALBUM", GST_TAG_ALBUM);
- PyModule_AddStringConstant (m, "TAG_DATE", GST_TAG_DATE);
- PyModule_AddStringConstant (m, "TAG_GENRE", GST_TAG_GENRE);
- PyModule_AddStringConstant (m, "TAG_COMMENT", GST_TAG_COMMENT);
- PyModule_AddStringConstant (m, "TAG_TRACK_NUMBER", GST_TAG_TRACK_NUMBER);
- PyModule_AddStringConstant (m, "TAG_TRACK_COUNT", GST_TAG_TRACK_COUNT);
- PyModule_AddStringConstant (m, "TAG_ALBUM_VOLUME_NUMBER", GST_TAG_ALBUM_VOLUME_NUMBER);
- PyModule_AddStringConstant (m, "TAG_ALBUM_VOLUME_COUNT", GST_TAG_ALBUM_VOLUME_COUNT);
- PyModule_AddStringConstant (m, "TAG_LOCATION", GST_TAG_LOCATION);
- PyModule_AddStringConstant (m, "TAG_DESCRIPTION", GST_TAG_DESCRIPTION);
- PyModule_AddStringConstant (m, "TAG_VERSION", GST_TAG_VERSION);
- PyModule_AddStringConstant (m, "TAG_ISRC", GST_TAG_ISRC);
- PyModule_AddStringConstant (m, "TAG_ORGANIZATION", GST_TAG_ORGANIZATION);
- PyModule_AddStringConstant (m, "TAG_COPYRIGHT", GST_TAG_COPYRIGHT);
- PyModule_AddStringConstant (m, "TAG_CONTACT", GST_TAG_CONTACT);
- PyModule_AddStringConstant (m, "TAG_LICENSE", GST_TAG_LICENSE);
- PyModule_AddStringConstant (m, "TAG_PERFORMER", GST_TAG_PERFORMER);
- PyModule_AddStringConstant (m, "TAG_DURATION", GST_TAG_DURATION);
- PyModule_AddStringConstant (m, "TAG_CODEC", GST_TAG_CODEC);
- PyModule_AddStringConstant (m, "TAG_VIDEO_CODEC", GST_TAG_VIDEO_CODEC);
- PyModule_AddStringConstant (m, "TAG_AUDIO_CODEC", GST_TAG_AUDIO_CODEC);
- PyModule_AddStringConstant (m, "TAG_BITRATE", GST_TAG_BITRATE);
- PyModule_AddStringConstant (m, "TAG_NOMINAL_BITRATE", GST_TAG_NOMINAL_BITRATE);
- PyModule_AddStringConstant (m, "TAG_MINIMUM_BITRATE", GST_TAG_MINIMUM_BITRATE);
- PyModule_AddStringConstant (m, "TAG_MAXIMUM_BITRATE", GST_TAG_MAXIMUM_BITRATE);
- PyModule_AddStringConstant (m, "TAG_SERIAL", GST_TAG_SERIAL);
- PyModule_AddStringConstant (m, "TAG_ENCODER", GST_TAG_ENCODER);
- PyModule_AddStringConstant (m, "TAG_ENCODER_VERSION", GST_TAG_ENCODER_VERSION);
- PyModule_AddStringConstant (m, "TAG_TRACK_GAIN", GST_TAG_TRACK_GAIN);
- PyModule_AddStringConstant (m, "TAG_TRACK_PEAK", GST_TAG_TRACK_PEAK);
- PyModule_AddStringConstant (m, "TAG_ALBUM_GAIN", GST_TAG_ALBUM_GAIN);
- PyModule_AddStringConstant (m, "TAG_ALBUM_PEAK", GST_TAG_ALBUM_PEAK);
- PyModule_AddStringConstant (m, "TAG_LANGUAGE_CODE", GST_TAG_LANGUAGE_CODE);
+ PyObject *m, *d;
+ PyObject *av, *tuple;
+ int argc, i;
+ guint major, minor, micro, nano;
+ char **argv;
+ GError *error = NULL;
+
+ init_pygobject ();
+
+ /* pull in arguments */
+ av = PySys_GetObject ("argv");
+ if (av != NULL) {
+ argc = PyList_Size (av);
+ argv = g_new (char *, argc);
+ for (i = 0; i < argc; i++)
+ argv[i] = g_strdup (PyString_AsString (PyList_GetItem (av, i)));
+ } else {
+ /* gst_init_check does not like argc == 0 */
+ argc = 1;
+ argv = g_new (char *, argc);
+ argv[0] = g_strdup ("");
+ }
+ if (!gst_init_check (&argc, &argv, &error)) {
+ gchar *errstr;
+
+ if (argv != NULL) {
+ for (i = 0; i < argc; i++)
+ g_free (argv[i]);
+ g_free (argv);
+ }
+ errstr = g_strdup_printf ("can't initialize module gst: %s",
+ error ? GST_STR_NULL (error->message) : "no error given");
+ PyErr_SetString (PyExc_RuntimeError, errstr);
+ g_free (errstr);
+ g_error_free (error);
+ setlocale (LC_NUMERIC, "C");
+ return;
+ }
+
+ setlocale (LC_NUMERIC, "C");
+ if (argv != NULL) {
+ PySys_SetArgv (argc, argv);
+ for (i = 0; i < argc; i++)
+ g_free (argv[i]);
+ g_free (argv);
+ }
+
+ /* Initialize debugging category */
+ GST_DEBUG_CATEGORY_INIT (pygst_debug, "pygst", 0,
+ "GStreamer python bindings");
+ GST_DEBUG_CATEGORY_INIT (python_debug, "python", GST_DEBUG_FG_GREEN,
+ "python code using gst-python");
+
+ pygobject_register_sinkfunc (GST_TYPE_OBJECT, sink_gstobject);
+
+ m = Py_InitModule ("_gst", pygst_functions);
+ d = PyModule_GetDict (m);
+
+ /* gst version */
+ gst_version (&major, &minor, &micro, &nano);
+ tuple = Py_BuildValue ("(iii)", major, minor, micro);
+ PyDict_SetItemString (d, "gst_version", tuple);
+ Py_DECREF (tuple);
+
+ /* gst-python version */
+ tuple = Py_BuildValue ("(iii)", PYGST_MAJOR_VERSION, PYGST_MINOR_VERSION,
+ PYGST_MICRO_VERSION);
+ PyDict_SetItemString (d, "pygst_version", tuple);
+ Py_DECREF (tuple);
+
+ /* clock stuff */
+ PyModule_AddIntConstant (m, "SECOND", GST_SECOND);
+ PyModule_AddIntConstant (m, "MSECOND", GST_MSECOND);
+ PyModule_AddIntConstant (m, "NSECOND", GST_NSECOND);
+
+ PyModule_AddObject (m, "CLOCK_TIME_NONE",
+ PyLong_FromUnsignedLongLong (GST_CLOCK_TIME_NONE));
+ PyModule_AddObject (m, "BUFFER_OFFSET_NONE",
+ PyLong_FromUnsignedLongLong (GST_BUFFER_OFFSET_NONE));
+
+ pygst_exceptions_register_classes (d);
+
+ REGISTER_TYPE (d, PyGstIterator_Type, "Iterator");
+
+
+ pygstminiobject_register_class (d, "GstMiniObject", GST_TYPE_MINI_OBJECT,
+ &PyGstMiniObject_Type, NULL);
+ pyg_register_boxed_custom (GST_TYPE_MINI_OBJECT,
+ pygstminiobject_from_gvalue, pygstminiobject_to_gvalue);
+
+ pygst_register_classes (d);
+ pygst_add_constants (m, "GST_");
+
+ /* make our types available */
+ PyModule_AddObject (m, "TYPE_ELEMENT_FACTORY",
+ pyg_type_wrapper_new (GST_TYPE_ELEMENT_FACTORY));
+ PyModule_AddObject (m, "TYPE_INDEX_FACTORY",
+ pyg_type_wrapper_new (GST_TYPE_INDEX_FACTORY));
+ PyModule_AddObject (m, "TYPE_TYPE_FIND_FACTORY",
+ pyg_type_wrapper_new (GST_TYPE_TYPE_FIND_FACTORY));
+
+ /* GStreamer core tags */
+ PyModule_AddStringConstant (m, "TAG_TITLE", GST_TAG_TITLE);
+ PyModule_AddStringConstant (m, "TAG_ARTIST", GST_TAG_ARTIST);
+ PyModule_AddStringConstant (m, "TAG_ALBUM", GST_TAG_ALBUM);
+ PyModule_AddStringConstant (m, "TAG_DATE", GST_TAG_DATE);
+ PyModule_AddStringConstant (m, "TAG_GENRE", GST_TAG_GENRE);
+ PyModule_AddStringConstant (m, "TAG_COMMENT", GST_TAG_COMMENT);
+ PyModule_AddStringConstant (m, "TAG_TRACK_NUMBER", GST_TAG_TRACK_NUMBER);
+ PyModule_AddStringConstant (m, "TAG_TRACK_COUNT", GST_TAG_TRACK_COUNT);
+ PyModule_AddStringConstant (m, "TAG_ALBUM_VOLUME_NUMBER",
+ GST_TAG_ALBUM_VOLUME_NUMBER);
+ PyModule_AddStringConstant (m, "TAG_ALBUM_VOLUME_COUNT",
+ GST_TAG_ALBUM_VOLUME_COUNT);
+ PyModule_AddStringConstant (m, "TAG_LOCATION", GST_TAG_LOCATION);
+ PyModule_AddStringConstant (m, "TAG_DESCRIPTION", GST_TAG_DESCRIPTION);
+ PyModule_AddStringConstant (m, "TAG_VERSION", GST_TAG_VERSION);
+ PyModule_AddStringConstant (m, "TAG_ISRC", GST_TAG_ISRC);
+ PyModule_AddStringConstant (m, "TAG_ORGANIZATION", GST_TAG_ORGANIZATION);
+ PyModule_AddStringConstant (m, "TAG_COPYRIGHT", GST_TAG_COPYRIGHT);
+ PyModule_AddStringConstant (m, "TAG_CONTACT", GST_TAG_CONTACT);
+ PyModule_AddStringConstant (m, "TAG_LICENSE", GST_TAG_LICENSE);
+ PyModule_AddStringConstant (m, "TAG_PERFORMER", GST_TAG_PERFORMER);
+ PyModule_AddStringConstant (m, "TAG_DURATION", GST_TAG_DURATION);
+ PyModule_AddStringConstant (m, "TAG_CODEC", GST_TAG_CODEC);
+ PyModule_AddStringConstant (m, "TAG_VIDEO_CODEC", GST_TAG_VIDEO_CODEC);
+ PyModule_AddStringConstant (m, "TAG_AUDIO_CODEC", GST_TAG_AUDIO_CODEC);
+ PyModule_AddStringConstant (m, "TAG_BITRATE", GST_TAG_BITRATE);
+ PyModule_AddStringConstant (m, "TAG_NOMINAL_BITRATE",
+ GST_TAG_NOMINAL_BITRATE);
+ PyModule_AddStringConstant (m, "TAG_MINIMUM_BITRATE",
+ GST_TAG_MINIMUM_BITRATE);
+ PyModule_AddStringConstant (m, "TAG_MAXIMUM_BITRATE",
+ GST_TAG_MAXIMUM_BITRATE);
+ PyModule_AddStringConstant (m, "TAG_SERIAL", GST_TAG_SERIAL);
+ PyModule_AddStringConstant (m, "TAG_ENCODER", GST_TAG_ENCODER);
+ PyModule_AddStringConstant (m, "TAG_ENCODER_VERSION",
+ GST_TAG_ENCODER_VERSION);
+ PyModule_AddStringConstant (m, "TAG_TRACK_GAIN", GST_TAG_TRACK_GAIN);
+ PyModule_AddStringConstant (m, "TAG_TRACK_PEAK", GST_TAG_TRACK_PEAK);
+ PyModule_AddStringConstant (m, "TAG_ALBUM_GAIN", GST_TAG_ALBUM_GAIN);
+ PyModule_AddStringConstant (m, "TAG_ALBUM_PEAK", GST_TAG_ALBUM_PEAK);
+ PyModule_AddStringConstant (m, "TAG_LANGUAGE_CODE", GST_TAG_LANGUAGE_CODE);
#if (GST_VERSION_MAJOR == 0 && GST_VERSION_MINOR == 10 && \
((GST_VERSION_MICRO >= 6) || (GST_VERSION_MICRO == 5 && GST_VERSION_NANO > 0)))
- PyModule_AddStringConstant (m, "TAG_IMAGE", GST_TAG_IMAGE);
+ PyModule_AddStringConstant (m, "TAG_IMAGE", GST_TAG_IMAGE);
#if ((GST_VERSION_MICRO >= 7) || (GST_VERSION_MICRO == 6 && GST_VERSION_NANO > 0 ))
- PyModule_AddStringConstant (m, "TAG_PREVIEW_IMAGE", GST_TAG_PREVIEW_IMAGE);
+ PyModule_AddStringConstant (m, "TAG_PREVIEW_IMAGE", GST_TAG_PREVIEW_IMAGE);
#if ((GST_VERSION_MICRO >= 10) || (GST_VERSION_MICRO == 9 && GST_VERSION_NANO > 0 ))
- PyModule_AddStringConstant (m, "TAG_EXTENDED_COMMENT", GST_TAG_EXTENDED_COMMENT);
+ PyModule_AddStringConstant (m, "TAG_EXTENDED_COMMENT",
+ GST_TAG_EXTENDED_COMMENT);
#if ((GST_VERSION_MICRO >= 14) || (GST_VERSION_MICRO == 13 && GST_VERSION_NANO > 0))
- PyModule_AddStringConstant (m, "TAG_LICENSE_URI", GST_TAG_LICENSE_URI);
+ PyModule_AddStringConstant (m, "TAG_LICENSE_URI", GST_TAG_LICENSE_URI);
#if ((GST_VERSION_MICRO >= 15) || (GST_VERSION_MICRO == 14 && GST_VERSION_NANO > 0))
- PyModule_AddStringConstant (m, "TAG_COMPOSER", GST_TAG_COMPOSER);
- PyModule_AddStringConstant (m, "TAG_ARTIST_SORTNAME", GST_TAG_ARTIST_SORTNAME);
- PyModule_AddStringConstant (m, "TAG_ALBUM_SORTNAME", GST_TAG_ALBUM_SORTNAME);
- PyModule_AddStringConstant (m, "TAG_TITLE_SORTNAME", GST_TAG_TITLE_SORTNAME);
+ PyModule_AddStringConstant (m, "TAG_COMPOSER", GST_TAG_COMPOSER);
+ PyModule_AddStringConstant (m, "TAG_ARTIST_SORTNAME",
+ GST_TAG_ARTIST_SORTNAME);
+ PyModule_AddStringConstant (m, "TAG_ALBUM_SORTNAME", GST_TAG_ALBUM_SORTNAME);
+ PyModule_AddStringConstant (m, "TAG_TITLE_SORTNAME", GST_TAG_TITLE_SORTNAME);
+#if ((GST_VERSION_MICRO >= 23) || (GST_VERSION_MICRO == 22 && GST_VERSION_NANO > 0))
+ PyModule_AddStringConstant (m, "TAG_SUBTITLE_CODEC", GST_TAG_SUBTITLE_CODEC);
+ PyModule_AddStringConstant (m, "TAG_HOMEPAGE", GST_TAG_HOMEPAGE);
+#endif
#endif
#endif
#endif
#endif
#endif
- PyModule_AddStringConstant (m, "LIBRARY_ERROR", (gchar *) g_quark_to_string(GST_LIBRARY_ERROR));
- PyModule_AddStringConstant (m, "RESOURCE_ERROR",(gchar *) g_quark_to_string(GST_RESOURCE_ERROR));
- PyModule_AddStringConstant (m, "CORE_ERROR", (gchar *) g_quark_to_string(GST_CORE_ERROR));
- PyModule_AddStringConstant (m, "STREAM_ERROR", (gchar *) g_quark_to_string(GST_STREAM_ERROR));
+ PyModule_AddStringConstant (m, "LIBRARY_ERROR",
+ (gchar *) g_quark_to_string (GST_LIBRARY_ERROR));
+ PyModule_AddStringConstant (m, "RESOURCE_ERROR",
+ (gchar *) g_quark_to_string (GST_RESOURCE_ERROR));
+ PyModule_AddStringConstant (m, "CORE_ERROR",
+ (gchar *) g_quark_to_string (GST_CORE_ERROR));
+ PyModule_AddStringConstant (m, "STREAM_ERROR",
+ (gchar *) g_quark_to_string (GST_STREAM_ERROR));
- if (PyErr_Occurred ()) {
- Py_FatalError ("can't initialize module gst");
- }
+ if (PyErr_Occurred ()) {
+ Py_FatalError ("can't initialize module gst");
+ }
}