mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-03-30 12:49:40 +00:00
gst/: Let's split up gst.override,
Original commit message from CVS: * gst/Makefile.am: * gst/gst.override: * gst/gsttaglist.override: * gst/gstobject.override: Let's split up gst.override, Added gsttaglist.override and gstobject.override * gst/arg-types.py: * gst/gst-argtypes.c: Cleanup, removed deprecated GstData related functions * gst/gst-extrafuncs.defs: * gst/gst.defs: Moved debug functions to gst-extrafuncs.defs
This commit is contained in:
parent
d1d42bd770
commit
60961d9b93
9 changed files with 549 additions and 552 deletions
16
ChangeLog
16
ChangeLog
|
@ -1,3 +1,19 @@
|
||||||
|
2005-09-28 Edward Hervey <edward@fluendo.com>
|
||||||
|
|
||||||
|
* gst/Makefile.am:
|
||||||
|
* gst/gst.override:
|
||||||
|
* gst/gsttaglist.override:
|
||||||
|
* gst/gstobject.override:
|
||||||
|
Let's split up gst.override,
|
||||||
|
Added gsttaglist.override and gstobject.override
|
||||||
|
|
||||||
|
* gst/arg-types.py:
|
||||||
|
* gst/gst-argtypes.c:
|
||||||
|
Cleanup, removed deprecated GstData related functions
|
||||||
|
* gst/gst-extrafuncs.defs:
|
||||||
|
* gst/gst.defs:
|
||||||
|
Moved debug functions to gst-extrafuncs.defs
|
||||||
|
|
||||||
2005-09-28 Thomas Vander Stichele <thomas at apestaart dot org>
|
2005-09-28 Thomas Vander Stichele <thomas at apestaart dot org>
|
||||||
|
|
||||||
* gst/gst.defs:
|
* gst/gst.defs:
|
||||||
|
|
|
@ -44,9 +44,11 @@ GST_OVERRIDES = \
|
||||||
gstcaps.override \
|
gstcaps.override \
|
||||||
gstelement.override \
|
gstelement.override \
|
||||||
gstmessage.override \
|
gstmessage.override \
|
||||||
|
gstobject.override \
|
||||||
gstquery.override \
|
gstquery.override \
|
||||||
gstpad.override \
|
gstpad.override \
|
||||||
gststructure.override \
|
gststructure.override \
|
||||||
|
gsttaglist.override \
|
||||||
gstlibs.override
|
gstlibs.override
|
||||||
|
|
||||||
GST_DEFS = gst.defs gst-types.defs gst-extrafuncs.defs libs.defs
|
GST_DEFS = gst.defs gst-types.defs gst-extrafuncs.defs libs.defs
|
||||||
|
|
|
@ -24,32 +24,6 @@
|
||||||
|
|
||||||
from argtypes import UInt64Arg, Int64Arg, PointerArg, ArgMatcher, ArgType, matcher
|
from argtypes import UInt64Arg, Int64Arg, PointerArg, ArgMatcher, ArgType, matcher
|
||||||
|
|
||||||
class GstDataPtrArg(ArgType):
|
|
||||||
normal = (' if (!pygst_data_from_pyobject(py_%(name)s, &%(name)s))\n'
|
|
||||||
' return NULL;\n'
|
|
||||||
' gst_data_ref (%(name)s);\n')
|
|
||||||
null = (' if (py_%(name)s == Py_None)\n'
|
|
||||||
' %(name)s = NULL;\n'
|
|
||||||
' else if (pyst_data_from_pyobject(py_%(name)s, %(name)s_rect))\n'
|
|
||||||
' %(name)s = &%(name)s_rect;\n'
|
|
||||||
' else\n'
|
|
||||||
' return NULL;\n'
|
|
||||||
' gst_data_ref (%(name)s);\n')
|
|
||||||
def write_param(self, ptype, pname, pdflt, pnull, info):
|
|
||||||
if pnull:
|
|
||||||
info.varlist.add('GstData', pname + '_data')
|
|
||||||
info.varlist.add('GstData', '*' + pname)
|
|
||||||
info.varlist.add('PyObject', '*py_' + pname + ' = Py_None')
|
|
||||||
info.add_parselist('O', ['&py_' + pname], [pname])
|
|
||||||
info.arglist.append(pname)
|
|
||||||
info.codebefore.append(self.null % {'name': pname})
|
|
||||||
else:
|
|
||||||
info.varlist.add('GstData*', pname)
|
|
||||||
info.varlist.add('PyObject', '*py_' + pname)
|
|
||||||
info.add_parselist('O', ['&py_' + pname], [pname])
|
|
||||||
info.arglist.append(pname)
|
|
||||||
info.codebefore.append(self.normal % {'name': pname})
|
|
||||||
|
|
||||||
class XmlNodeArg(ArgType):
|
class XmlNodeArg(ArgType):
|
||||||
"""libxml2 node generator"""
|
"""libxml2 node generator"""
|
||||||
|
|
||||||
|
@ -155,7 +129,6 @@ class GstCapsArg(ArgType):
|
||||||
raise RuntimeError, "write_return not implemented for %s" % ptype
|
raise RuntimeError, "write_return not implemented for %s" % ptype
|
||||||
info.codeafter.append(' return pyg_boxed_new (GST_TYPE_CAPS, ret, '+copyval+', TRUE);')
|
info.codeafter.append(' return pyg_boxed_new (GST_TYPE_CAPS, ret, '+copyval+', TRUE);')
|
||||||
|
|
||||||
matcher.register('GstData*', GstDataPtrArg())
|
|
||||||
matcher.register('GstClockTime', UInt64Arg())
|
matcher.register('GstClockTime', UInt64Arg())
|
||||||
matcher.register('GstClockTimeDiff', Int64Arg())
|
matcher.register('GstClockTimeDiff', Int64Arg())
|
||||||
matcher.register('xmlNodePtr', XmlNodeArg())
|
matcher.register('xmlNodePtr', XmlNodeArg())
|
||||||
|
|
|
@ -26,45 +26,6 @@
|
||||||
#include <gst/gst.h>
|
#include <gst/gst.h>
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
/* gboolean */
|
|
||||||
/* pygst_data_from_pyobject(PyObject *object, GstData **data) */
|
|
||||||
/* { */
|
|
||||||
/* if (pyg_boxed_check(object, GST_TYPE_DATA)) { */
|
|
||||||
/* *data = pyg_boxed_get(object, GstData); */
|
|
||||||
/* return TRUE; */
|
|
||||||
/* } else if (pyg_boxed_check(object, GST_TYPE_BUFFER)) { */
|
|
||||||
/* *data = GST_DATA (pyg_boxed_get(object, GstBuffer)); */
|
|
||||||
/* return TRUE; */
|
|
||||||
/* } else if (pyg_boxed_check(object, GST_TYPE_EVENT)) { */
|
|
||||||
/* *data = GST_DATA (pyg_boxed_get(object, GstEvent)); */
|
|
||||||
/* return TRUE; */
|
|
||||||
/* } */
|
|
||||||
|
|
||||||
/* PyErr_Clear(); */
|
|
||||||
/* PyErr_SetString(PyExc_TypeError, "could not convert to GstData"); */
|
|
||||||
/* return FALSE; */
|
|
||||||
/* } */
|
|
||||||
|
|
||||||
/* static PyObject * */
|
|
||||||
/* PyGstData_from_value(const GValue *value) */
|
|
||||||
/* { */
|
|
||||||
/* GstData *data = (GstData *)g_value_get_boxed(value); */
|
|
||||||
|
|
||||||
/* return pyg_boxed_new(GST_TYPE_DATA, data, TRUE, TRUE); */
|
|
||||||
/* } */
|
|
||||||
|
|
||||||
/* static int */
|
|
||||||
/* PyGstData_to_value(GValue *value, PyObject *object) */
|
|
||||||
/* { */
|
|
||||||
/* GstData* data; */
|
|
||||||
|
|
||||||
/* if (!pygst_data_from_pyobject(object, &data)) */
|
|
||||||
/* return -1; */
|
|
||||||
|
|
||||||
/* g_value_set_boxed(value, data); */
|
|
||||||
/* return 0; */
|
|
||||||
/* } */
|
|
||||||
|
|
||||||
/* This function will return a copy, unless the following is all TRUE:
|
/* This function will return a copy, unless the following is all TRUE:
|
||||||
* - The given PyObject contains a GstCaps already
|
* - The given PyObject contains a GstCaps already
|
||||||
* - The copy parameter is non-NULL
|
* - The copy parameter is non-NULL
|
||||||
|
@ -103,10 +64,3 @@ pygst_caps_from_pyobject (PyObject *object, gboolean *copy)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* void */
|
|
||||||
/* _pygst_register_boxed_types(PyObject *moddict) */
|
|
||||||
/* { */
|
|
||||||
/* pyg_register_boxed_custom(GST_TYPE_DATA, */
|
|
||||||
/* PyGstData_from_value, */
|
|
||||||
/* PyGstData_to_value); */
|
|
||||||
/* } */
|
|
||||||
|
|
|
@ -22,4 +22,95 @@
|
||||||
(parameters
|
(parameters
|
||||||
'("GstObjectFlags" "flag")
|
'("GstObjectFlags" "flag")
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
;; DEBUGGING FUNCTIONS FROM PYTHON
|
||||||
|
;; The c functions don't actually exist
|
||||||
|
|
||||||
|
(define-function log
|
||||||
|
(c-name "gst_log")
|
||||||
|
(return-type "none")
|
||||||
|
(parameters
|
||||||
|
'("gchar *" "msg")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
(define-function debug
|
||||||
|
(c-name "gst_debug")
|
||||||
|
(return-type "none")
|
||||||
|
(parameters
|
||||||
|
'("gchar *" "msg")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
(define-function info
|
||||||
|
(c-name "gst_info")
|
||||||
|
(return-type "none")
|
||||||
|
(parameters
|
||||||
|
'("gchar *" "msg")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
(define-function warning
|
||||||
|
(c-name "gst_warning")
|
||||||
|
(return-type "none")
|
||||||
|
(parameters
|
||||||
|
'("gchar *" "msg")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
(define-function error
|
||||||
|
(c-name "gst_error")
|
||||||
|
(return-type "none")
|
||||||
|
(parameters
|
||||||
|
'("gchar *" "msg")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
;; OBJECT DEBUGGING FUNCTIONS FROM PYTHON
|
||||||
|
;; The c functions don't actually exist
|
||||||
|
|
||||||
|
(define-method log
|
||||||
|
(of-object "GstObject")
|
||||||
|
(c-name "gst_object_log")
|
||||||
|
(return-type "none")
|
||||||
|
(parameters
|
||||||
|
'("gchar *" "msg")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
(define-method debug
|
||||||
|
(of-object "GstObject")
|
||||||
|
(c-name "gst_object_debug")
|
||||||
|
(return-type "none")
|
||||||
|
(parameters
|
||||||
|
'("gchar *" "msg")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
(define-method info
|
||||||
|
(of-object "GstObject")
|
||||||
|
(c-name "gst_object_info")
|
||||||
|
(return-type "none")
|
||||||
|
(parameters
|
||||||
|
'("gchar *" "msg")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
(define-method warning
|
||||||
|
(of-object "GstObject")
|
||||||
|
(c-name "gst_object_warning")
|
||||||
|
(return-type "none")
|
||||||
|
(parameters
|
||||||
|
'("gchar *" "msg")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
(define-method error
|
||||||
|
(of-object "GstObject")
|
||||||
|
(c-name "gst_object_error")
|
||||||
|
(return-type "none")
|
||||||
|
(parameters
|
||||||
|
'("gchar *" "msg")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
91
gst/gst.defs
91
gst/gst.defs
|
@ -2335,49 +2335,6 @@
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
;; DEBUGGING FUNCTIONS FROM PYTHON
|
|
||||||
;; The c functions don't actually exist
|
|
||||||
|
|
||||||
(define-function log
|
|
||||||
(c-name "gst_log")
|
|
||||||
(return-type "none")
|
|
||||||
(parameters
|
|
||||||
'("gchar *" "msg")
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
(define-function debug
|
|
||||||
(c-name "gst_debug")
|
|
||||||
(return-type "none")
|
|
||||||
(parameters
|
|
||||||
'("gchar *" "msg")
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
(define-function info
|
|
||||||
(c-name "gst_info")
|
|
||||||
(return-type "none")
|
|
||||||
(parameters
|
|
||||||
'("gchar *" "msg")
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
(define-function warning
|
|
||||||
(c-name "gst_warning")
|
|
||||||
(return-type "none")
|
|
||||||
(parameters
|
|
||||||
'("gchar *" "msg")
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
(define-function error
|
|
||||||
(c-name "gst_error")
|
|
||||||
(return-type "none")
|
|
||||||
(parameters
|
|
||||||
'("gchar *" "msg")
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
;; From ../gstreamer/gst/gstinterface.h
|
;; From ../gstreamer/gst/gstinterface.h
|
||||||
|
|
||||||
(define-function gst_implements_interface_get_type
|
(define-function gst_implements_interface_get_type
|
||||||
|
@ -2988,54 +2945,6 @@
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
;; OBJECT DEBUGGING FUNCTIONS FROM PYTHON
|
|
||||||
;; The c functions don't actually exist
|
|
||||||
|
|
||||||
(define-method log
|
|
||||||
(of-object "GstObject")
|
|
||||||
(c-name "gst_object_log")
|
|
||||||
(return-type "none")
|
|
||||||
(parameters
|
|
||||||
'("gchar *" "msg")
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
(define-method debug
|
|
||||||
(of-object "GstObject")
|
|
||||||
(c-name "gst_object_debug")
|
|
||||||
(return-type "none")
|
|
||||||
(parameters
|
|
||||||
'("gchar *" "msg")
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
(define-method info
|
|
||||||
(of-object "GstObject")
|
|
||||||
(c-name "gst_object_info")
|
|
||||||
(return-type "none")
|
|
||||||
(parameters
|
|
||||||
'("gchar *" "msg")
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
(define-method warning
|
|
||||||
(of-object "GstObject")
|
|
||||||
(c-name "gst_object_warning")
|
|
||||||
(return-type "none")
|
|
||||||
(parameters
|
|
||||||
'("gchar *" "msg")
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
(define-method error
|
|
||||||
(of-object "GstObject")
|
|
||||||
(c-name "gst_object_error")
|
|
||||||
(return-type "none")
|
|
||||||
(parameters
|
|
||||||
'("gchar *" "msg")
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
;; From ../gstreamer/gst/gstpad.h
|
;; From ../gstreamer/gst/gstpad.h
|
||||||
|
|
||||||
(define-function gst_pad_get_type
|
(define-function gst_pad_get_type
|
||||||
|
|
392
gst/gst.override
392
gst/gst.override
|
@ -253,14 +253,16 @@ pygst_debug_log (PyObject *pyobject, PyObject *string, GstDebugLevel level,
|
||||||
include
|
include
|
||||||
gstbin.override
|
gstbin.override
|
||||||
gstbuffer.override
|
gstbuffer.override
|
||||||
gstevent.override
|
|
||||||
gstcaps.override
|
|
||||||
gstbus.override
|
gstbus.override
|
||||||
|
gstcaps.override
|
||||||
gstelement.override
|
gstelement.override
|
||||||
|
gstevent.override
|
||||||
gstmessage.override
|
gstmessage.override
|
||||||
gstquery.override
|
gstobject.override
|
||||||
gstpad.override
|
gstpad.override
|
||||||
|
gstquery.override
|
||||||
gststructure.override
|
gststructure.override
|
||||||
|
gsttaglist.override
|
||||||
gstlibs.override
|
gstlibs.override
|
||||||
%%
|
%%
|
||||||
init
|
init
|
||||||
|
@ -292,398 +294,14 @@ ignore-glob
|
||||||
gst_class_*
|
gst_class_*
|
||||||
gst_init*
|
gst_init*
|
||||||
gst_interface_*
|
gst_interface_*
|
||||||
gst_tag_list_get_*
|
|
||||||
gst_value_*
|
gst_value_*
|
||||||
%%
|
%%
|
||||||
ignore
|
ignore
|
||||||
gst_alloc_trace_list
|
gst_alloc_trace_list
|
||||||
gst_alloc_trace_get
|
gst_alloc_trace_get
|
||||||
gst_error_get_message
|
gst_error_get_message
|
||||||
gst_object_default_deep_notify
|
|
||||||
gst_object_check_uniqueness
|
|
||||||
gst_object_replace
|
|
||||||
gst_parse_launchv
|
gst_parse_launchv
|
||||||
gst_tag_list_add
|
|
||||||
gst_tag_list_add_values
|
|
||||||
gst_tag_list_add_valist_values
|
|
||||||
gst_tag_list_copy_value
|
|
||||||
gst_trace_read_tsc
|
gst_trace_read_tsc
|
||||||
|
|
||||||
|
|
||||||
%%
|
|
||||||
define GstTagList.keys noargs
|
|
||||||
void
|
|
||||||
tag_foreach_func_dict (const GstTagList *list,
|
|
||||||
const gchar *tag,
|
|
||||||
PyObject *dict)
|
|
||||||
{
|
|
||||||
int count;
|
|
||||||
guint i;
|
|
||||||
const GValue *gvalue;
|
|
||||||
PyObject *value;
|
|
||||||
gchar *key;
|
|
||||||
|
|
||||||
count = gst_tag_list_get_tag_size(GST_TAG_LIST(list), tag);
|
|
||||||
|
|
||||||
for (i = 0; i < count; i++) {
|
|
||||||
gvalue = gst_tag_list_get_value_index(GST_TAG_LIST(list), tag, i);
|
|
||||||
value = pygst_value_as_pyobject(gvalue, TRUE);
|
|
||||||
key = g_strdup (tag);
|
|
||||||
PyDict_SetItemString(dict, key, value);
|
|
||||||
g_free (key);
|
|
||||||
Py_DECREF(value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
void
|
|
||||||
tag_foreach_func_list (const GstTagList *list,
|
|
||||||
const gchar *tag,
|
|
||||||
PyObject *py_list)
|
|
||||||
{
|
|
||||||
int count;
|
|
||||||
|
|
||||||
count = gst_tag_list_get_tag_size(GST_TAG_LIST(list), tag);
|
|
||||||
if (count == 0)
|
|
||||||
PyErr_SetString(PyExc_KeyError, tag);
|
|
||||||
else if (count == 1)
|
|
||||||
PyList_Append(py_list, PyString_FromString(tag));
|
|
||||||
#if 0
|
|
||||||
else if (count > 1)
|
|
||||||
PyErr_SetString(PyExc_TypeError, "lists are currently unspported");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
static PyObject*
|
|
||||||
_wrap_gst_tag_list_keys(PyGObject *self)
|
|
||||||
{
|
|
||||||
PyObject *dict;
|
|
||||||
|
|
||||||
dict = PyList_New(0);
|
|
||||||
|
|
||||||
gst_tag_list_foreach(GST_TAG_LIST(self->obj),
|
|
||||||
(GstTagForeachFunc)tag_foreach_func_list,
|
|
||||||
(gpointer)dict);
|
|
||||||
return dict;
|
|
||||||
}
|
|
||||||
%%
|
|
||||||
override-slot GstTagList.tp_as_mapping
|
|
||||||
static int
|
|
||||||
_wrap_gst_tag_list_length(PyGObject *self)
|
|
||||||
{
|
|
||||||
return gst_structure_n_fields((GstStructure*)self->obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
static PyObject *
|
|
||||||
_wrap_gst_tag_list_subscript(PyGObject *self, PyObject *py_key)
|
|
||||||
{
|
|
||||||
PyObject *v = NULL;
|
|
||||||
char *key = PyString_AsString(py_key);
|
|
||||||
|
|
||||||
int count = gst_tag_list_get_tag_size(GST_TAG_LIST(self->obj), key);
|
|
||||||
if (count == 0) {
|
|
||||||
PyErr_SetObject(PyExc_KeyError, py_key);
|
|
||||||
} else if (count == 1) {
|
|
||||||
const GValue *gvalue;
|
|
||||||
gvalue = gst_tag_list_get_value_index(GST_TAG_LIST(self->obj), key, 0);
|
|
||||||
v = pygst_value_as_pyobject(gvalue, TRUE);
|
|
||||||
} else {
|
|
||||||
PyErr_SetString(PyExc_TypeError, "lists are currently unspported");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (v != NULL)
|
|
||||||
Py_INCREF(v);
|
|
||||||
return v;
|
|
||||||
}
|
|
||||||
|
|
||||||
static PySequenceMethods _wrap_gst_tag_list_tp_as_mapping = {
|
|
||||||
(inquiry)_wrap_gst_tag_list_length, /* mp_length */
|
|
||||||
(binaryfunc)_wrap_gst_tag_list_subscript, /* mp_subscript */
|
|
||||||
NULL,
|
|
||||||
};
|
|
||||||
|
|
||||||
%%
|
|
||||||
define GstTagList.has_key args
|
|
||||||
static PyObject*
|
|
||||||
_wrap_gst_tag_list_has_key(PyGObject *self, PyObject *args)
|
|
||||||
{
|
|
||||||
gchar *key;
|
|
||||||
const GValue *gvalue;
|
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "s:GstTagList.has_key", &key))
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
gvalue = gst_tag_list_get_value_index(GST_TAG_LIST(self->obj), key, 0);
|
|
||||||
|
|
||||||
return PyInt_FromLong(gvalue != NULL);
|
|
||||||
}
|
|
||||||
%%
|
|
||||||
define GstTagList.get
|
|
||||||
static PyObject *
|
|
||||||
_wrap_gst_tag_list_get(PyGObject *self, PyObject *args)
|
|
||||||
{
|
|
||||||
char *key;
|
|
||||||
PyObject *failobj = Py_None;
|
|
||||||
PyObject *val = NULL;
|
|
||||||
const GValue *gvalue;
|
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "s|O:GstTagList.get", &key, &failobj))
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
gvalue = gst_tag_list_get_value_index(GST_TAG_LIST(self->obj), key, 0);
|
|
||||||
if (gvalue != NULL) {
|
|
||||||
int count = gst_tag_list_get_tag_size(GST_TAG_LIST(self->obj), key);
|
|
||||||
if (count == 0) {
|
|
||||||
PyErr_SetString(PyExc_KeyError, key);
|
|
||||||
} else if (count == 1) {
|
|
||||||
gvalue = gst_tag_list_get_value_index(GST_TAG_LIST(self->obj), key, 0);
|
|
||||||
val = pygst_value_as_pyobject(gvalue, TRUE);
|
|
||||||
} else {
|
|
||||||
PyErr_SetString(PyExc_TypeError, "lists are currently unspported");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (val == NULL)
|
|
||||||
val = failobj;
|
|
||||||
Py_INCREF(val);
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
%%
|
|
||||||
override gst_tag_list_foreach kwargs
|
|
||||||
static gboolean
|
|
||||||
pygst_tag_list_foreach_marshal(GstTagList *list,
|
|
||||||
const gchar *tag,
|
|
||||||
gpointer user_data)
|
|
||||||
{
|
|
||||||
PyGstCustomNotify *cunote = user_data;
|
|
||||||
PyObject *py_list;
|
|
||||||
PyObject *py_key, *retobj;
|
|
||||||
gboolean retval = TRUE;
|
|
||||||
PyGILState_STATE state;
|
|
||||||
|
|
||||||
g_assert(cunote->func);
|
|
||||||
|
|
||||||
state = pyg_gil_state_ensure();
|
|
||||||
|
|
||||||
py_list = pyg_boxed_new(GST_TYPE_TAG_LIST, list, TRUE, TRUE);
|
|
||||||
py_key = Py_BuildValue("s", tag);
|
|
||||||
if (cunote->data)
|
|
||||||
retobj = PyEval_CallFunction(cunote->func, "(NNO)",
|
|
||||||
py_list,
|
|
||||||
py_key,
|
|
||||||
cunote->data);
|
|
||||||
else
|
|
||||||
retobj = PyEval_CallFunction(cunote->func, "(NN)",
|
|
||||||
py_list,
|
|
||||||
py_key);
|
|
||||||
|
|
||||||
if (PyErr_Occurred () || (retobj == NULL) || (retobj == Py_None)) {
|
|
||||||
PyErr_Print ();
|
|
||||||
retval = FALSE;
|
|
||||||
} else if (retobj != Py_None) {
|
|
||||||
retval = PyInt_AsLong(retobj);
|
|
||||||
}
|
|
||||||
|
|
||||||
Py_XDECREF(retobj);
|
|
||||||
|
|
||||||
pyg_gil_state_release(state);
|
|
||||||
|
|
||||||
return retval;
|
|
||||||
}
|
|
||||||
|
|
||||||
static PyObject *
|
|
||||||
_wrap_gst_tag_list_foreach (PyGObject *self,
|
|
||||||
PyObject *args,
|
|
||||||
PyObject *kwargs)
|
|
||||||
{
|
|
||||||
static char *kwlist[] = { "foreach_function", "args", NULL };
|
|
||||||
PyObject *pyfunc, *pyarg = NULL;
|
|
||||||
PyGstCustomNotify cunote;
|
|
||||||
|
|
||||||
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
|
|
||||||
"O|O:GstTagList.foreach",
|
|
||||||
kwlist, &pyfunc, &pyarg))
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
if (!PyCallable_Check(pyfunc)) {
|
|
||||||
PyErr_SetString(PyExc_TypeError, "foreach_function not callable");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
cunote.func = pyfunc;
|
|
||||||
cunote.data = pyarg;
|
|
||||||
gst_tag_list_foreach(pyg_boxed_get(self, GstTagList),
|
|
||||||
(GstTagForeachFunc)pygst_tag_list_foreach_marshal,
|
|
||||||
&cunote);
|
|
||||||
|
|
||||||
Py_INCREF(Py_None);
|
|
||||||
return Py_None;
|
|
||||||
}
|
|
||||||
%%
|
|
||||||
override gst_tag_list_get_value_index kwargs
|
|
||||||
static PyObject *
|
|
||||||
_wrap_gst_tag_list_get_value_index (PyGObject *self,
|
|
||||||
PyObject *args,
|
|
||||||
PyObject *kwargs)
|
|
||||||
{
|
|
||||||
static char *kwlist[] = { "tag", "index", NULL };
|
|
||||||
char *tag;
|
|
||||||
int index;
|
|
||||||
const GValue *gvalue;
|
|
||||||
|
|
||||||
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
|
|
||||||
"si:GstTagList.get_value_index",
|
|
||||||
kwlist, &tag, &index))
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
gvalue = gst_tag_list_get_value_index(pyg_boxed_get(self, GstTagList),
|
|
||||||
tag,
|
|
||||||
index);
|
|
||||||
|
|
||||||
return pygst_value_as_pyobject(gvalue, FALSE);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* keep this attribute around even after 2.8 for compatibility reasons */
|
|
||||||
%%
|
|
||||||
override-attr GstObject.__gstrefcount__
|
|
||||||
static PyObject *
|
|
||||||
_wrap_gst_object__get___gstrefcount__(PyGObject *self, void *closure)
|
|
||||||
{
|
|
||||||
return PyInt_FromLong(GST_OBJECT_REFCOUNT_VALUE(self->obj));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* < GLib 2.8 */
|
|
||||||
|
|
||||||
/* because of our gst_object_ref/_unref, we do our own GC-related
|
|
||||||
* functions:
|
|
||||||
* our own tp_traverse that checks the GstObject refcount,
|
|
||||||
* and reuse _dealloc and _clear from gobject.GObject for ours
|
|
||||||
* compare with pygtk/gobject/pygobject.c
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/* a define is a little evil, but it seems to generate the right code
|
|
||||||
* to allow us to do our garbage collection routines */
|
|
||||||
%%
|
|
||||||
override-slot GstObject.tp_flags
|
|
||||||
#define _wrap_gst_object_tp_flags Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC
|
|
||||||
|
|
||||||
%%
|
|
||||||
override-slot GstObject.tp_traverse
|
|
||||||
static int
|
|
||||||
_wrap_gst_object_tp_traverse(PyGObject *self, visitproc visit, void *arg)
|
|
||||||
{
|
|
||||||
int ret = 0;
|
|
||||||
GSList *tmp;
|
|
||||||
|
|
||||||
if (self->inst_dict) ret = visit(self->inst_dict, arg);
|
|
||||||
if (ret != 0) return ret;
|
|
||||||
|
|
||||||
for (tmp = self->closures; tmp != NULL; tmp = tmp->next) {
|
|
||||||
PyGClosure *closure = tmp->data;
|
|
||||||
|
|
||||||
if (closure->callback) ret = visit(closure->callback, arg);
|
|
||||||
if (ret != 0) return ret;
|
|
||||||
|
|
||||||
if (closure->extra_args) ret = visit(closure->extra_args, arg);
|
|
||||||
if (ret != 0) return ret;
|
|
||||||
|
|
||||||
if (closure->swap_data) ret = visit(closure->swap_data, arg);
|
|
||||||
if (ret != 0) return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (self->obj && GST_OBJECT_REFCOUNT_VALUE(self->obj) == 1) {
|
|
||||||
GST_DEBUG_OBJECT(self->obj,
|
|
||||||
"gst.Object.tp_traverse: GstObject refcount of %p is 1, visit",
|
|
||||||
self->obj);
|
|
||||||
ret = visit((PyObject *)self, arg);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
%%
|
|
||||||
override-slot GstObject.tp_clear
|
|
||||||
int
|
|
||||||
_wrap_gst_object_tp_clear(PyGObject *self)
|
|
||||||
{
|
|
||||||
int ret;
|
|
||||||
GObject *obj = self->obj;
|
|
||||||
|
|
||||||
/* if we're a GstObject, we want to monkeypatch the GObject.tp_clear's
|
|
||||||
* g_object_unref and "replace" it with a gst_object_unref */
|
|
||||||
if (! GST_IS_OBJECT (obj))
|
|
||||||
obj = NULL;
|
|
||||||
else {
|
|
||||||
GST_DEBUG_OBJECT (obj, "gst.Object.tp_clear");
|
|
||||||
g_object_ref (obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = PyGObject_Type.tp_clear((PyObject *) self);
|
|
||||||
|
|
||||||
if (obj)
|
|
||||||
gst_object_unref (obj);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
%%
|
|
||||||
override-slot GstObject.tp_dealloc
|
|
||||||
void
|
|
||||||
_wrap_gst_object_tp_dealloc(PyGObject *self)
|
|
||||||
{
|
|
||||||
GObject *obj = self->obj;
|
|
||||||
|
|
||||||
/* if we're a GstObject, we want to monkeypatch the GObject.tp_dealloc's
|
|
||||||
* g_object_unref and "replace" it with a gst_object_unref */
|
|
||||||
if (! GST_IS_OBJECT (obj))
|
|
||||||
obj = NULL;
|
|
||||||
else {
|
|
||||||
GST_DEBUG_OBJECT (obj, "gst.Object.tp_dealloc");
|
|
||||||
g_object_ref (obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
PyGObject_Type.tp_dealloc((PyObject *) self);
|
|
||||||
|
|
||||||
if (obj)
|
|
||||||
gst_object_unref (obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
%%
|
|
||||||
override-slot GstObject.tp_repr
|
|
||||||
static PyObject *
|
|
||||||
_wrap_gst_object_tp_repr(PyObject *self)
|
|
||||||
{
|
|
||||||
gchar *repr;
|
|
||||||
PyObject *ret;
|
|
||||||
GstObject *object = GST_OBJECT (pygobject_get (self));
|
|
||||||
|
|
||||||
repr = g_strdup_printf ("<%s object (%s) at 0x%lx>",
|
|
||||||
self->ob_type->tp_name,
|
|
||||||
GST_OBJECT_NAME(object) ? GST_OBJECT_NAME(object) : "unnamed",
|
|
||||||
(long)self);
|
|
||||||
ret = PyString_FromString(repr);
|
|
||||||
g_free (repr);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
%%
|
|
||||||
override-slot GstObject.tp_str
|
|
||||||
static PyObject *
|
|
||||||
_wrap_gst_object_tp_str(PyObject *self)
|
|
||||||
{
|
|
||||||
gchar *repr, *path;
|
|
||||||
PyObject *ret;
|
|
||||||
GstObject *object = GST_OBJECT (pygobject_get (self));
|
|
||||||
|
|
||||||
path = gst_object_get_path_string (object);
|
|
||||||
repr = g_strdup_printf ("%s (%s)",
|
|
||||||
path, self->ob_type->tp_name);
|
|
||||||
ret = PyString_FromString(repr);
|
|
||||||
g_free (repr);
|
|
||||||
g_free (path);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
%%
|
%%
|
||||||
override-slot GstPluginFeature.tp_repr
|
override-slot GstPluginFeature.tp_repr
|
||||||
static PyObject *
|
static PyObject *
|
||||||
|
|
171
gst/gstobject.override
Normal file
171
gst/gstobject.override
Normal file
|
@ -0,0 +1,171 @@
|
||||||
|
/* -*- Mode: C; ; c-file-style: "python" -*- */
|
||||||
|
/* gst-python
|
||||||
|
* Copyright (C) 2005 Edward Hervey
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Library General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Library General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Library General Public
|
||||||
|
* License along with this library; if not, write to the
|
||||||
|
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
* Boston, MA 02111-1307, USA.
|
||||||
|
*
|
||||||
|
* Author: Edward Hervey <edward@fluendo.com>
|
||||||
|
*/
|
||||||
|
|
||||||
|
%%
|
||||||
|
ignore
|
||||||
|
gst_object_default_deep_notify
|
||||||
|
gst_object_check_uniqueness
|
||||||
|
gst_object_replace
|
||||||
|
|
||||||
|
%%
|
||||||
|
override-attr GstObject.__gstrefcount__
|
||||||
|
|
||||||
|
/* keep this attribute around even after 2.8 for compatibility reasons */
|
||||||
|
static PyObject *
|
||||||
|
_wrap_gst_object__get___gstrefcount__(PyGObject *self, void *closure)
|
||||||
|
{
|
||||||
|
return PyInt_FromLong(GST_OBJECT_REFCOUNT_VALUE(self->obj));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* < GLib 2.8 */
|
||||||
|
|
||||||
|
/* because of our gst_object_ref/_unref, we do our own GC-related
|
||||||
|
* functions:
|
||||||
|
* our own tp_traverse that checks the GstObject refcount,
|
||||||
|
* and reuse _dealloc and _clear from gobject.GObject for ours
|
||||||
|
* compare with pygtk/gobject/pygobject.c
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/* a define is a little evil, but it seems to generate the right code
|
||||||
|
* to allow us to do our garbage collection routines */
|
||||||
|
%%
|
||||||
|
override-slot GstObject.tp_flags
|
||||||
|
#define _wrap_gst_object_tp_flags Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC
|
||||||
|
|
||||||
|
%%
|
||||||
|
override-slot GstObject.tp_traverse
|
||||||
|
static int
|
||||||
|
_wrap_gst_object_tp_traverse(PyGObject *self, visitproc visit, void *arg)
|
||||||
|
{
|
||||||
|
int ret = 0;
|
||||||
|
GSList *tmp;
|
||||||
|
|
||||||
|
if (self->inst_dict) ret = visit(self->inst_dict, arg);
|
||||||
|
if (ret != 0) return ret;
|
||||||
|
|
||||||
|
for (tmp = self->closures; tmp != NULL; tmp = tmp->next) {
|
||||||
|
PyGClosure *closure = tmp->data;
|
||||||
|
|
||||||
|
if (closure->callback) ret = visit(closure->callback, arg);
|
||||||
|
if (ret != 0) return ret;
|
||||||
|
|
||||||
|
if (closure->extra_args) ret = visit(closure->extra_args, arg);
|
||||||
|
if (ret != 0) return ret;
|
||||||
|
|
||||||
|
if (closure->swap_data) ret = visit(closure->swap_data, arg);
|
||||||
|
if (ret != 0) return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (self->obj && GST_OBJECT_REFCOUNT_VALUE(self->obj) == 1) {
|
||||||
|
GST_DEBUG_OBJECT(self->obj,
|
||||||
|
"gst.Object.tp_traverse: GstObject refcount of %p is 1, visit",
|
||||||
|
self->obj);
|
||||||
|
ret = visit((PyObject *)self, arg);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
%%
|
||||||
|
override-slot GstObject.tp_clear
|
||||||
|
int
|
||||||
|
_wrap_gst_object_tp_clear(PyGObject *self)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
GObject *obj = self->obj;
|
||||||
|
|
||||||
|
/* if we're a GstObject, we want to monkeypatch the GObject.tp_clear's
|
||||||
|
* g_object_unref and "replace" it with a gst_object_unref */
|
||||||
|
if (! GST_IS_OBJECT (obj))
|
||||||
|
obj = NULL;
|
||||||
|
else {
|
||||||
|
GST_DEBUG_OBJECT (obj, "gst.Object.tp_clear");
|
||||||
|
g_object_ref (obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = PyGObject_Type.tp_clear((PyObject *) self);
|
||||||
|
|
||||||
|
if (obj)
|
||||||
|
gst_object_unref (obj);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
%%
|
||||||
|
override-slot GstObject.tp_dealloc
|
||||||
|
void
|
||||||
|
_wrap_gst_object_tp_dealloc(PyGObject *self)
|
||||||
|
{
|
||||||
|
GObject *obj = self->obj;
|
||||||
|
|
||||||
|
/* if we're a GstObject, we want to monkeypatch the GObject.tp_dealloc's
|
||||||
|
* g_object_unref and "replace" it with a gst_object_unref */
|
||||||
|
if (! GST_IS_OBJECT (obj))
|
||||||
|
obj = NULL;
|
||||||
|
else {
|
||||||
|
GST_DEBUG_OBJECT (obj, "gst.Object.tp_dealloc");
|
||||||
|
g_object_ref (obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
PyGObject_Type.tp_dealloc((PyObject *) self);
|
||||||
|
|
||||||
|
if (obj)
|
||||||
|
gst_object_unref (obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
%%
|
||||||
|
override-slot GstObject.tp_repr
|
||||||
|
static PyObject *
|
||||||
|
_wrap_gst_object_tp_repr(PyObject *self)
|
||||||
|
{
|
||||||
|
gchar *repr;
|
||||||
|
PyObject *ret;
|
||||||
|
GstObject *object = GST_OBJECT (pygobject_get (self));
|
||||||
|
|
||||||
|
repr = g_strdup_printf ("<%s object (%s) at 0x%lx>",
|
||||||
|
self->ob_type->tp_name,
|
||||||
|
GST_OBJECT_NAME(object) ? GST_OBJECT_NAME(object) : "unnamed",
|
||||||
|
(long)self);
|
||||||
|
ret = PyString_FromString(repr);
|
||||||
|
g_free (repr);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
%%
|
||||||
|
override-slot GstObject.tp_str
|
||||||
|
static PyObject *
|
||||||
|
_wrap_gst_object_tp_str(PyObject *self)
|
||||||
|
{
|
||||||
|
gchar *repr, *path;
|
||||||
|
PyObject *ret;
|
||||||
|
GstObject *object = GST_OBJECT (pygobject_get (self));
|
||||||
|
|
||||||
|
path = gst_object_get_path_string (object);
|
||||||
|
repr = g_strdup_printf ("%s (%s)",
|
||||||
|
path, self->ob_type->tp_name);
|
||||||
|
ret = PyString_FromString(repr);
|
||||||
|
g_free (repr);
|
||||||
|
g_free (path);
|
||||||
|
return ret;
|
||||||
|
}
|
263
gst/gsttaglist.override
Normal file
263
gst/gsttaglist.override
Normal file
|
@ -0,0 +1,263 @@
|
||||||
|
/* -*- Mode: C; ; c-file-style: "python" -*- */
|
||||||
|
/* gst-python
|
||||||
|
* Copyright (C) 2005 Edward Hervey
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Library General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Library General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Library General Public
|
||||||
|
* License along with this library; if not, write to the
|
||||||
|
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
* Boston, MA 02111-1307, USA.
|
||||||
|
*
|
||||||
|
* Author: Edward Hervey <edward@fluendo.com>
|
||||||
|
*/
|
||||||
|
|
||||||
|
%%
|
||||||
|
ignore-glob
|
||||||
|
gst_tag_list_get_*
|
||||||
|
%%
|
||||||
|
ignore
|
||||||
|
gst_tag_list_add
|
||||||
|
gst_tag_list_add_values
|
||||||
|
gst_tag_list_add_valist_values
|
||||||
|
gst_tag_list_copy_value
|
||||||
|
%%
|
||||||
|
define GstTagList.keys noargs
|
||||||
|
void
|
||||||
|
tag_foreach_func_dict (const GstTagList *list,
|
||||||
|
const gchar *tag,
|
||||||
|
PyObject *dict)
|
||||||
|
{
|
||||||
|
int count;
|
||||||
|
guint i;
|
||||||
|
const GValue *gvalue;
|
||||||
|
PyObject *value;
|
||||||
|
gchar *key;
|
||||||
|
|
||||||
|
count = gst_tag_list_get_tag_size(GST_TAG_LIST(list), tag);
|
||||||
|
|
||||||
|
for (i = 0; i < count; i++) {
|
||||||
|
gvalue = gst_tag_list_get_value_index(GST_TAG_LIST(list), tag, i);
|
||||||
|
value = pygst_value_as_pyobject(gvalue, TRUE);
|
||||||
|
key = g_strdup (tag);
|
||||||
|
PyDict_SetItemString(dict, key, value);
|
||||||
|
g_free (key);
|
||||||
|
Py_DECREF(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void
|
||||||
|
tag_foreach_func_list (const GstTagList *list,
|
||||||
|
const gchar *tag,
|
||||||
|
PyObject *py_list)
|
||||||
|
{
|
||||||
|
int count;
|
||||||
|
|
||||||
|
count = gst_tag_list_get_tag_size(GST_TAG_LIST(list), tag);
|
||||||
|
if (count == 0)
|
||||||
|
PyErr_SetString(PyExc_KeyError, tag);
|
||||||
|
else if (count == 1)
|
||||||
|
PyList_Append(py_list, PyString_FromString(tag));
|
||||||
|
#if 0
|
||||||
|
else if (count > 1)
|
||||||
|
PyErr_SetString(PyExc_TypeError, "lists are currently unspported");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static PyObject*
|
||||||
|
_wrap_gst_tag_list_keys(PyGObject *self)
|
||||||
|
{
|
||||||
|
PyObject *dict;
|
||||||
|
|
||||||
|
dict = PyList_New(0);
|
||||||
|
|
||||||
|
gst_tag_list_foreach(GST_TAG_LIST(self->obj),
|
||||||
|
(GstTagForeachFunc)tag_foreach_func_list,
|
||||||
|
(gpointer)dict);
|
||||||
|
return dict;
|
||||||
|
}
|
||||||
|
%%
|
||||||
|
override-slot GstTagList.tp_as_mapping
|
||||||
|
static int
|
||||||
|
_wrap_gst_tag_list_length(PyGObject *self)
|
||||||
|
{
|
||||||
|
return gst_structure_n_fields((GstStructure*)self->obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
_wrap_gst_tag_list_subscript(PyGObject *self, PyObject *py_key)
|
||||||
|
{
|
||||||
|
PyObject *v = NULL;
|
||||||
|
char *key = PyString_AsString(py_key);
|
||||||
|
|
||||||
|
int count = gst_tag_list_get_tag_size(GST_TAG_LIST(self->obj), key);
|
||||||
|
if (count == 0) {
|
||||||
|
PyErr_SetObject(PyExc_KeyError, py_key);
|
||||||
|
} else if (count == 1) {
|
||||||
|
const GValue *gvalue;
|
||||||
|
gvalue = gst_tag_list_get_value_index(GST_TAG_LIST(self->obj), key, 0);
|
||||||
|
v = pygst_value_as_pyobject(gvalue, TRUE);
|
||||||
|
} else {
|
||||||
|
PyErr_SetString(PyExc_TypeError, "lists are currently unspported");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (v != NULL)
|
||||||
|
Py_INCREF(v);
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
|
static PySequenceMethods _wrap_gst_tag_list_tp_as_mapping = {
|
||||||
|
(inquiry)_wrap_gst_tag_list_length, /* mp_length */
|
||||||
|
(binaryfunc)_wrap_gst_tag_list_subscript, /* mp_subscript */
|
||||||
|
NULL,
|
||||||
|
};
|
||||||
|
|
||||||
|
%%
|
||||||
|
define GstTagList.has_key args
|
||||||
|
static PyObject*
|
||||||
|
_wrap_gst_tag_list_has_key(PyGObject *self, PyObject *args)
|
||||||
|
{
|
||||||
|
gchar *key;
|
||||||
|
const GValue *gvalue;
|
||||||
|
|
||||||
|
if (!PyArg_ParseTuple(args, "s:GstTagList.has_key", &key))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
gvalue = gst_tag_list_get_value_index(GST_TAG_LIST(self->obj), key, 0);
|
||||||
|
|
||||||
|
return PyInt_FromLong(gvalue != NULL);
|
||||||
|
}
|
||||||
|
%%
|
||||||
|
define GstTagList.get
|
||||||
|
static PyObject *
|
||||||
|
_wrap_gst_tag_list_get(PyGObject *self, PyObject *args)
|
||||||
|
{
|
||||||
|
char *key;
|
||||||
|
PyObject *failobj = Py_None;
|
||||||
|
PyObject *val = NULL;
|
||||||
|
const GValue *gvalue;
|
||||||
|
|
||||||
|
if (!PyArg_ParseTuple(args, "s|O:GstTagList.get", &key, &failobj))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
gvalue = gst_tag_list_get_value_index(GST_TAG_LIST(self->obj), key, 0);
|
||||||
|
if (gvalue != NULL) {
|
||||||
|
int count = gst_tag_list_get_tag_size(GST_TAG_LIST(self->obj), key);
|
||||||
|
if (count == 0) {
|
||||||
|
PyErr_SetString(PyExc_KeyError, key);
|
||||||
|
} else if (count == 1) {
|
||||||
|
gvalue = gst_tag_list_get_value_index(GST_TAG_LIST(self->obj), key, 0);
|
||||||
|
val = pygst_value_as_pyobject(gvalue, TRUE);
|
||||||
|
} else {
|
||||||
|
PyErr_SetString(PyExc_TypeError, "lists are currently unspported");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (val == NULL)
|
||||||
|
val = failobj;
|
||||||
|
Py_INCREF(val);
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
%%
|
||||||
|
override gst_tag_list_foreach kwargs
|
||||||
|
static gboolean
|
||||||
|
pygst_tag_list_foreach_marshal(GstTagList *list,
|
||||||
|
const gchar *tag,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
PyGstCustomNotify *cunote = user_data;
|
||||||
|
PyObject *py_list;
|
||||||
|
PyObject *py_key, *retobj;
|
||||||
|
gboolean retval = TRUE;
|
||||||
|
PyGILState_STATE state;
|
||||||
|
|
||||||
|
g_assert(cunote->func);
|
||||||
|
|
||||||
|
state = pyg_gil_state_ensure();
|
||||||
|
|
||||||
|
py_list = pyg_boxed_new(GST_TYPE_TAG_LIST, list, TRUE, TRUE);
|
||||||
|
py_key = Py_BuildValue("s", tag);
|
||||||
|
if (cunote->data)
|
||||||
|
retobj = PyEval_CallFunction(cunote->func, "(NNO)",
|
||||||
|
py_list,
|
||||||
|
py_key,
|
||||||
|
cunote->data);
|
||||||
|
else
|
||||||
|
retobj = PyEval_CallFunction(cunote->func, "(NN)",
|
||||||
|
py_list,
|
||||||
|
py_key);
|
||||||
|
|
||||||
|
if (PyErr_Occurred () || (retobj == NULL) || (retobj == Py_None)) {
|
||||||
|
PyErr_Print ();
|
||||||
|
retval = FALSE;
|
||||||
|
} else if (retobj != Py_None) {
|
||||||
|
retval = PyInt_AsLong(retobj);
|
||||||
|
}
|
||||||
|
|
||||||
|
Py_XDECREF(retobj);
|
||||||
|
|
||||||
|
pyg_gil_state_release(state);
|
||||||
|
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
_wrap_gst_tag_list_foreach (PyGObject *self,
|
||||||
|
PyObject *args,
|
||||||
|
PyObject *kwargs)
|
||||||
|
{
|
||||||
|
static char *kwlist[] = { "foreach_function", "args", NULL };
|
||||||
|
PyObject *pyfunc, *pyarg = NULL;
|
||||||
|
PyGstCustomNotify cunote;
|
||||||
|
|
||||||
|
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
|
||||||
|
"O|O:GstTagList.foreach",
|
||||||
|
kwlist, &pyfunc, &pyarg))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
if (!PyCallable_Check(pyfunc)) {
|
||||||
|
PyErr_SetString(PyExc_TypeError, "foreach_function not callable");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
cunote.func = pyfunc;
|
||||||
|
cunote.data = pyarg;
|
||||||
|
gst_tag_list_foreach(pyg_boxed_get(self, GstTagList),
|
||||||
|
(GstTagForeachFunc)pygst_tag_list_foreach_marshal,
|
||||||
|
&cunote);
|
||||||
|
|
||||||
|
Py_INCREF(Py_None);
|
||||||
|
return Py_None;
|
||||||
|
}
|
||||||
|
%%
|
||||||
|
override gst_tag_list_get_value_index kwargs
|
||||||
|
static PyObject *
|
||||||
|
_wrap_gst_tag_list_get_value_index (PyGObject *self,
|
||||||
|
PyObject *args,
|
||||||
|
PyObject *kwargs)
|
||||||
|
{
|
||||||
|
static char *kwlist[] = { "tag", "index", NULL };
|
||||||
|
char *tag;
|
||||||
|
int index;
|
||||||
|
const GValue *gvalue;
|
||||||
|
|
||||||
|
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
|
||||||
|
"si:GstTagList.get_value_index",
|
||||||
|
kwlist, &tag, &index))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
gvalue = gst_tag_list_get_value_index(pyg_boxed_get(self, GstTagList),
|
||||||
|
tag,
|
||||||
|
index);
|
||||||
|
|
||||||
|
return pygst_value_as_pyobject(gvalue, FALSE);
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue