mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-02 12:32:29 +00:00
gst/gstmodule.c: Added GST_TAG_* string constants
Original commit message from CVS: * gst/gstmodule.c: (init_gst): Added GST_TAG_* string constants * gst/gstpad.override: Make probe handler return TRUE if the Python callback doesn't return anything. * gst/gsttaglist.override: Cleaned up gst.TagList, works as a dictionnary.
This commit is contained in:
parent
0ca0d99781
commit
e3beb3ed78
4 changed files with 83 additions and 207 deletions
10
ChangeLog
10
ChangeLog
|
@ -1,3 +1,13 @@
|
|||
2005-11-10 Edward Hervey <edward@fluendo.com>
|
||||
|
||||
* gst/gstmodule.c: (init_gst):
|
||||
Added GST_TAG_* string constants
|
||||
* gst/gstpad.override:
|
||||
Make probe handler return TRUE if the Python callback doesn't return
|
||||
anything.
|
||||
* gst/gsttaglist.override:
|
||||
Cleaned up gst.TagList, works as a dictionnary.
|
||||
|
||||
2005-11-08 Edward Hervey <edward@fluendo.com>
|
||||
|
||||
* gst/gst.defs:
|
||||
|
|
|
@ -205,6 +205,43 @@ init_gst (void)
|
|||
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);
|
||||
|
||||
g_timeout_add_full (0, 100, python_do_pending_calls, NULL, NULL);
|
||||
|
||||
atexit(gst_deinit);
|
||||
|
|
|
@ -147,7 +147,7 @@ probe_handler_marshal(GstPad *pad, GstMiniObject *data, gpointer user_data)
|
|||
|
||||
if (!ret) {
|
||||
PyErr_Print();
|
||||
res = FALSE;
|
||||
res = TRUE;
|
||||
} else {
|
||||
res = PyObject_IsTrue(ret);
|
||||
Py_DECREF(ret);
|
||||
|
|
|
@ -29,61 +29,9 @@ ignore
|
|||
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;
|
||||
}
|
||||
gst_tag_list_get
|
||||
gst_tag_list_remove_tag
|
||||
gst_tag_list_foreach
|
||||
%%
|
||||
override-slot GstTagList.tp_as_mapping
|
||||
static int
|
||||
|
@ -96,17 +44,15 @@ static PyObject *
|
|||
_wrap_gst_tag_list_subscript(PyGObject *self, PyObject *py_key)
|
||||
{
|
||||
PyObject *v = NULL;
|
||||
char *key = PyString_AsString(py_key);
|
||||
const char *field = 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) {
|
||||
if (gst_structure_has_field((GstStructure*)self->obj, field)) {
|
||||
const GValue *gvalue;
|
||||
gvalue = gst_tag_list_get_value_index(GST_TAG_LIST(self->obj), key, 0);
|
||||
gvalue = gst_structure_get_value((GstStructure*)self->obj, field);
|
||||
g_assert(gvalue != NULL);
|
||||
v = pygst_value_as_pyobject(gvalue, TRUE);
|
||||
} else {
|
||||
PyErr_SetString(PyExc_TypeError, "lists are currently unspported");
|
||||
PyErr_SetString(PyExc_KeyError, field);
|
||||
}
|
||||
|
||||
if (v != NULL)
|
||||
|
@ -114,150 +60,33 @@ _wrap_gst_tag_list_subscript(PyGObject *self, PyObject *py_key)
|
|||
return v;
|
||||
}
|
||||
|
||||
static PySequenceMethods _wrap_gst_tag_list_tp_as_mapping = {
|
||||
static int
|
||||
_wrap_gst_tag_list_ass_subscript(PyGObject *self,
|
||||
PyObject *py_key,
|
||||
PyObject *py_value)
|
||||
{
|
||||
const char *key;
|
||||
GstStructure* structure;
|
||||
|
||||
structure = (GstStructure*)self->obj;
|
||||
key = PyString_AsString(py_key);
|
||||
if (py_value != NULL) {
|
||||
GValue v = { 0, };
|
||||
if (!pygst_value_init_for_pyobject (&v, py_value))
|
||||
return -1;
|
||||
if (pygst_value_from_pyobject(&v, py_value))
|
||||
return -1;
|
||||
gst_structure_set_value(structure, key, &v);
|
||||
g_value_unset(&v);
|
||||
} else {
|
||||
gst_structure_remove_field(structure, key);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static PyMappingMethods _wrap_gst_tag_list_tp_as_mapping = {
|
||||
(inquiry)_wrap_gst_tag_list_length, /* mp_length */
|
||||
(binaryfunc)_wrap_gst_tag_list_subscript, /* mp_subscript */
|
||||
NULL,
|
||||
(objobjargproc)_wrap_gst_tag_list_ass_subscript /* mp_ass_subscript */
|
||||
};
|
||||
|
||||
%%
|
||||
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