/** * gst_buffer_pool_config_add_option: * @config: a #GstBufferPool configuration * @option: an option to add * * Enabled the option in @config. This will instruct the @bufferpool to enable * the specified option on the buffers that it allocates. * * The supported options by @pool can be retrieved with gst_buffer_pool_get_options(). */ void gst_buffer_pool_config_add_option (GstStructure * config, const gchar * option) { const GValue *value; GValue option_value = { 0, }; guint i, len; g_return_if_fail (config != NULL); value = gst_structure_id_get_value (config, GST_QUARK (OPTIONS)); if (value) { len = gst_value_array_get_size (value); for (i = 0; i < len; ++i) { const GValue *nth_val = gst_value_array_get_value (value, i); if (g_str_equal (option, g_value_get_string (nth_val))) return; } } else { GValue new_array_val = { 0, }; g_value_init (&new_array_val, GST_TYPE_ARRAY); gst_structure_id_take_value (config, GST_QUARK (OPTIONS), &new_array_val); value = gst_structure_id_get_value (config, GST_QUARK (OPTIONS)); } g_value_init (&option_value, G_TYPE_STRING); g_value_set_string (&option_value, option); gst_value_array_append_and_take_value ((GValue *) value, &option_value); }
static int gi_gst_array_to_value (GValue * value, PyObject * object) { gint len, i; len = PySequence_Length (object); for (i = 0; i < len; i++) { GValue v = G_VALUE_INIT; GType type; PyObject *item; item = PySequence_GetItem (object, i); if (item == Py_None) type = G_TYPE_POINTER; else type = pyg_type_from_object ((PyObject *) Py_TYPE (item)); if (type == G_TYPE_NONE) { Py_DECREF (item); goto fail; } g_value_init (&v, type); if (pyg_value_from_pyobject (&v, item) < 0) { Py_DECREF (item); goto fail; } gst_value_array_append_and_take_value (value, &v); Py_DECREF (item); } return 0; fail: PyErr_SetString (PyExc_KeyError, "Object is not compatible with Gst.ValueArray"); return -1; }