mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-09-27 06:20:12 +00:00
More hacking on gst_structure_from_string() and related code.
Original commit message from CVS: More hacking on gst_structure_from_string() and related code.
This commit is contained in:
parent
d3eb290996
commit
15e96d0be3
2 changed files with 358 additions and 107 deletions
|
@ -947,16 +947,32 @@ gst_structure_to_string(const GstStructure *structure)
|
|||
g_string_append_printf(s, "\"%s\"", g_quark_to_string(structure->name));
|
||||
for(i=0;i<structure->fields->len;i++){
|
||||
GValue s_val = { 0 };
|
||||
GType type;
|
||||
|
||||
field = GST_STRUCTURE_FIELD(structure, i);
|
||||
|
||||
g_value_init(&s_val, G_TYPE_STRING);
|
||||
g_value_transform (&field->value, &s_val);
|
||||
|
||||
g_value_transform(&field->value, &s_val);
|
||||
type = G_VALUE_TYPE (&field->value);
|
||||
|
||||
if (type == GST_TYPE_LIST) {
|
||||
GPtrArray *ptr_array = g_value_peek_pointer (&field->value);
|
||||
if (ptr_array->len > 0){
|
||||
GValue *value = g_ptr_array_index (ptr_array, 0);
|
||||
|
||||
type = G_VALUE_TYPE (value);
|
||||
} else {
|
||||
type = G_TYPE_INT;
|
||||
}
|
||||
} else if (G_VALUE_TYPE(&field->value) == GST_TYPE_INT_RANGE) {
|
||||
type = G_TYPE_INT;
|
||||
} else if (G_VALUE_TYPE(&field->value) == GST_TYPE_DOUBLE_RANGE) {
|
||||
type = G_TYPE_DOUBLE;
|
||||
}
|
||||
g_string_append_printf(s, ", %s:%s=%s", g_quark_to_string(field->name),
|
||||
_gst_structure_to_abbr(G_VALUE_TYPE(&field->value)),
|
||||
g_value_get_string(&s_val));
|
||||
g_value_unset(&s_val);
|
||||
_gst_structure_to_abbr(type), g_value_get_string(&s_val));
|
||||
g_value_unset (&s_val);
|
||||
}
|
||||
return g_string_free(s, FALSE);
|
||||
}
|
||||
|
@ -1027,6 +1043,212 @@ error:
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
_gst_structure_parse_value (gchar *s, gchar **after, GType type,
|
||||
GValue *value)
|
||||
{
|
||||
gboolean ret = FALSE;
|
||||
gchar *val;
|
||||
gchar *end;
|
||||
|
||||
if (type == G_TYPE_INVALID) return FALSE;
|
||||
|
||||
while (g_ascii_isspace (*s)) s++;
|
||||
|
||||
g_value_init(value, type);
|
||||
|
||||
val = s;
|
||||
switch (type) {
|
||||
case G_TYPE_INT:
|
||||
{
|
||||
int x;
|
||||
x = strtol (val, &s, 0);
|
||||
if (val != s) {
|
||||
g_value_set_int (value, x);
|
||||
ret = TRUE;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case G_TYPE_FLOAT:
|
||||
{
|
||||
double x;
|
||||
x = g_ascii_strtod (val, &s);
|
||||
if (val != s) {
|
||||
g_value_set_float (value, x);
|
||||
ret = TRUE;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case G_TYPE_DOUBLE:
|
||||
{
|
||||
double x;
|
||||
x = g_ascii_strtod (val, &s);
|
||||
if (val != s) {
|
||||
g_value_set_double (value, x);
|
||||
ret = TRUE;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case G_TYPE_BOOLEAN:
|
||||
{
|
||||
int len;
|
||||
|
||||
ret = _gst_structure_parse_string (val, &end, &s);
|
||||
len = end - val;
|
||||
if (ret && len > 0) {
|
||||
if (g_ascii_strncasecmp (val, "true", len) == 0 ||
|
||||
g_ascii_strncasecmp (val, "yes", len) == 0 ||
|
||||
g_ascii_strncasecmp (val, "t", len) == 0 ||
|
||||
strncmp (val, "1", len)) {
|
||||
g_value_set_boolean (value, TRUE);
|
||||
} else if (g_ascii_strncasecmp (val, "false", len) == 0 ||
|
||||
g_ascii_strncasecmp (val, "no", len) == 0 ||
|
||||
g_ascii_strncasecmp (val, "f", len) == 0 ||
|
||||
strncmp (val, "0", len)) {
|
||||
g_value_set_boolean (value, FALSE);
|
||||
} else {
|
||||
ret = FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case G_TYPE_STRING:
|
||||
{
|
||||
ret = _gst_structure_parse_string (val, &end, &s);
|
||||
if (ret) {
|
||||
g_value_set_string_take_ownership (value,
|
||||
g_strndup(val, end - val));
|
||||
ret = TRUE;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
/* FIXME: make more general */
|
||||
if (type == GST_TYPE_FOURCC) {
|
||||
guint32 fourcc = 0;
|
||||
if (g_ascii_isdigit (*s)) {
|
||||
fourcc = strtoul (val, &s, 0);
|
||||
if (val != s) {
|
||||
ret = TRUE;
|
||||
}
|
||||
} else {
|
||||
ret = _gst_structure_parse_string (val, &end, &s);
|
||||
g_print("end - val = %d\n", end - val);
|
||||
if (end - val >= 4) {
|
||||
fourcc = GST_MAKE_FOURCC(val[0], val[1], val[2], val[3]);
|
||||
ret = TRUE;
|
||||
}
|
||||
}
|
||||
gst_value_set_fourcc (value, fourcc);
|
||||
} else {
|
||||
g_critical("type %s not handled", g_type_name(type));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
*after = s;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
_gst_structure_parse_range (gchar *s, gchar **after, GType type,
|
||||
GValue *value)
|
||||
{
|
||||
GValue value1 = { 0 };
|
||||
GValue value2 = { 0 };
|
||||
GType range_type;
|
||||
gboolean ret;
|
||||
|
||||
if (type == G_TYPE_DOUBLE) {
|
||||
range_type = GST_TYPE_DOUBLE_RANGE;
|
||||
} else if (type == G_TYPE_INT) {
|
||||
range_type = GST_TYPE_INT_RANGE;
|
||||
} else {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
g_print("%d \"%s\"\n", __LINE__, s);
|
||||
if (*s != '[') return FALSE;
|
||||
s++;
|
||||
|
||||
g_print("%d \"%s\"\n", __LINE__, s);
|
||||
ret = _gst_structure_parse_value(s, &s, type, &value1);
|
||||
if (ret == FALSE) return FALSE;
|
||||
|
||||
while (g_ascii_isspace (*s)) s++;
|
||||
|
||||
g_print("%d \"%s\"\n", __LINE__, s);
|
||||
if (*s != ',') return FALSE;
|
||||
s++;
|
||||
|
||||
while (g_ascii_isspace (*s)) s++;
|
||||
|
||||
g_print("%d \"%s\"\n", __LINE__, s);
|
||||
ret = _gst_structure_parse_value(s, &s, type, &value2);
|
||||
if (ret == FALSE) return FALSE;
|
||||
|
||||
while (g_ascii_isspace (*s)) s++;
|
||||
|
||||
g_print("%d \"%s\"\n", __LINE__, s);
|
||||
if (*s != ']') return FALSE;
|
||||
s++;
|
||||
|
||||
g_value_init(value, range_type);
|
||||
if (range_type == GST_TYPE_DOUBLE_RANGE) {
|
||||
gst_value_set_double_range(value, g_value_get_double(&value1),
|
||||
g_value_get_double(&value2));
|
||||
} else {
|
||||
gst_value_set_int_range(value, g_value_get_int(&value1),
|
||||
g_value_get_int(&value2));
|
||||
}
|
||||
|
||||
*after = s;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
_gst_structure_parse_list (gchar *s, gchar **after, GType type, GValue *value)
|
||||
{
|
||||
GValue list_value = { 0 };
|
||||
gboolean ret;
|
||||
|
||||
g_value_init(value, GST_TYPE_LIST);
|
||||
|
||||
if (*s != '(') return FALSE;
|
||||
s++;
|
||||
|
||||
while (g_ascii_isspace (*s)) s++;
|
||||
if (*s == ')') {
|
||||
s++;
|
||||
*after = s;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
ret = _gst_structure_parse_value(s, &s, type, &list_value);
|
||||
if (ret == FALSE) return FALSE;
|
||||
|
||||
while (g_ascii_isspace (*s)) s++;
|
||||
|
||||
while (*s != ')') {
|
||||
if (*s != ',') return FALSE;
|
||||
s++;
|
||||
|
||||
while (g_ascii_isspace (*s)) s++;
|
||||
|
||||
memset (&list_value, 0, sizeof (list_value));
|
||||
ret = _gst_structure_parse_value(s, &s, type, &list_value);
|
||||
if (ret == FALSE) return FALSE;
|
||||
|
||||
while (g_ascii_isspace (*s)) s++;
|
||||
}
|
||||
|
||||
s++;
|
||||
|
||||
*after = s;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
_gst_structure_parse_field (gchar *str, gchar **after, GstStructureField *field)
|
||||
{
|
||||
|
@ -1034,8 +1256,6 @@ _gst_structure_parse_field (gchar *str, gchar **after, GstStructureField *field)
|
|||
gchar *name;
|
||||
gchar *type_name;
|
||||
gchar *s, *del;
|
||||
gchar *val;
|
||||
gchar *end;
|
||||
gboolean have_type = FALSE;
|
||||
GType type = G_TYPE_INVALID;
|
||||
int ret;
|
||||
|
@ -1071,7 +1291,8 @@ g_print("type n is \"%s\"\n",g_type_name(type));
|
|||
if (type == G_TYPE_INVALID) return FALSE;
|
||||
|
||||
} else {
|
||||
if (g_ascii_isdigit (*s)) {
|
||||
if (g_ascii_isdigit (*s) ||
|
||||
((*s == '-' || *s == '+') && g_ascii_isdigit (s[1]))) {
|
||||
char *t = s;
|
||||
while (g_ascii_isdigit (*t)) t++;
|
||||
if (*t == '.'){
|
||||
|
@ -1081,99 +1302,15 @@ g_print("type n is \"%s\"\n",g_type_name(type));
|
|||
}
|
||||
} else if (g_ascii_isalpha (*s) || *s == '"' || *s == '\'') {
|
||||
type = G_TYPE_STRING;
|
||||
} else {
|
||||
/* FIXME */
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
g_value_init(&field->value, type);
|
||||
|
||||
ret = FALSE;
|
||||
val = s;
|
||||
switch (type) {
|
||||
case G_TYPE_INT:
|
||||
{
|
||||
int x;
|
||||
x = strtol (val, &s, 0);
|
||||
if (val != s) {
|
||||
g_value_set_int (&field->value, x);
|
||||
ret = TRUE;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case G_TYPE_FLOAT:
|
||||
{
|
||||
double x;
|
||||
x = g_ascii_strtod (val, &s);
|
||||
if (val != s) {
|
||||
g_value_set_float (&field->value, x);
|
||||
ret = TRUE;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case G_TYPE_DOUBLE:
|
||||
{
|
||||
double x;
|
||||
x = g_ascii_strtod (val, &s);
|
||||
if (val != s) {
|
||||
g_value_set_double (&field->value, x);
|
||||
ret = TRUE;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case G_TYPE_BOOLEAN:
|
||||
{
|
||||
int len;
|
||||
ret = _gst_structure_parse_string (val, &end, &s);
|
||||
len = end - val;
|
||||
if (ret) {
|
||||
if (strncmp (val, "true", len) == 0 ||
|
||||
strncmp (val, "yes", len) == 0 ||
|
||||
(len == 1 && (*val == 't' || *val == '1'))) {
|
||||
g_value_set_boolean (&field->value, TRUE);
|
||||
} else if (strncmp (val, "false", len) == 0 ||
|
||||
strncmp (val, "no", len) == 0 ||
|
||||
(len == 1 && (*val == 'f' || *val == '0'))) {
|
||||
g_value_set_boolean (&field->value, FALSE);
|
||||
} else {
|
||||
ret = FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case G_TYPE_STRING:
|
||||
{
|
||||
ret = _gst_structure_parse_string (val, &end, &s);
|
||||
if (ret) {
|
||||
g_value_set_string_take_ownership (&field->value,
|
||||
g_strndup(val, end - val));
|
||||
ret = TRUE;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
/* FIXME: make more general */
|
||||
if (type == GST_TYPE_FOURCC) {
|
||||
guint32 fourcc = 0;
|
||||
if (g_ascii_isdigit (*s)) {
|
||||
fourcc = strtoul (val, &s, 0);
|
||||
if (val != s) {
|
||||
ret = TRUE;
|
||||
}
|
||||
} else {
|
||||
ret = _gst_structure_parse_string (val, &end, &s);
|
||||
g_print("end - val = %d\n", end - val);
|
||||
if (end - val >= 4) {
|
||||
fourcc = GST_MAKE_FOURCC(val[0], val[1], val[2], val[3]);
|
||||
ret = TRUE;
|
||||
}
|
||||
}
|
||||
gst_value_set_fourcc (&field->value, fourcc);
|
||||
} else {
|
||||
g_critical("not handled");
|
||||
}
|
||||
break;
|
||||
if (*s == '[') {
|
||||
ret = _gst_structure_parse_range (s, &s, type, &field->value);
|
||||
} else if (*s == '(') {
|
||||
ret = _gst_structure_parse_list (s, &s, type, &field->value);
|
||||
} else {
|
||||
ret = _gst_structure_parse_value(s, &s, type, &field->value);
|
||||
}
|
||||
|
||||
*after = s;
|
||||
|
@ -1210,18 +1347,22 @@ gst_structure_from_string (const gchar *string, gchar **end)
|
|||
res = _gst_structure_parse_string (r, &w, &r);
|
||||
if (!res) return NULL;
|
||||
|
||||
while (*r && g_ascii_isspace(*r)) r++;
|
||||
if(!*r) return NULL;
|
||||
if(*r != ';' && *r != ',') return NULL;
|
||||
if(*r == ',') r++;
|
||||
while (g_ascii_isspace(*r)) r++;
|
||||
if(*r != 0 && *r != ';' && *r != ',') return NULL;
|
||||
|
||||
save = *w;
|
||||
*w = 0;
|
||||
structure = gst_structure_empty_new(name);
|
||||
*w = save;
|
||||
|
||||
while (*r && g_ascii_isspace(*r)) r++;
|
||||
while (*r && (*r != ';')){
|
||||
if(*r != ',') {
|
||||
return NULL;
|
||||
}
|
||||
r++;
|
||||
while (*r && g_ascii_isspace(*r)) r++;
|
||||
|
||||
memset(&field,0,sizeof(field));
|
||||
res = _gst_structure_parse_field (r, &r, &field);
|
||||
g_print("returned %d \"%s\"\n", res, r);
|
||||
if (!res) {
|
||||
|
@ -1229,6 +1370,7 @@ g_print("returned %d \"%s\"\n", res, r);
|
|||
return NULL;
|
||||
}
|
||||
gst_structure_set_field(structure, &field);
|
||||
while (*r && g_ascii_isspace(*r)) r++;
|
||||
}
|
||||
|
||||
if (end) *end = (char *)string + (r - copy);
|
||||
|
|
119
gst/gstvalue.c
119
gst/gstvalue.c
|
@ -436,6 +436,42 @@ gst_value_transform_int_range_string (const GValue *src_value,
|
|||
(int)src_value->data[0].v_long, (int)src_value->data[1].v_long);
|
||||
}
|
||||
|
||||
static void
|
||||
gst_value_transform_double_range_string (const GValue *src_value,
|
||||
GValue *dest_value)
|
||||
{
|
||||
dest_value->data[0].v_pointer = g_strdup_printf("[%g,%g]",
|
||||
src_value->data[0].v_double, src_value->data[1].v_double);
|
||||
}
|
||||
|
||||
static void
|
||||
gst_value_transform_list_string (const GValue *src_value,
|
||||
GValue *dest_value)
|
||||
{
|
||||
GValue *list_value;
|
||||
GArray *array;
|
||||
GString *s;
|
||||
int i;
|
||||
char *list_s;
|
||||
|
||||
array = src_value->data[0].v_pointer;
|
||||
|
||||
s = g_string_new("(");
|
||||
for(i=0;i<array->len;i++){
|
||||
list_value = &g_array_index(array, GValue, i);
|
||||
|
||||
if (i != 0) {
|
||||
g_string_append (s, ", ");
|
||||
}
|
||||
list_s = g_strdup_value_contents (list_value);
|
||||
g_string_append (s, list_s);
|
||||
g_free (list_s);
|
||||
}
|
||||
g_string_append (s, ")");
|
||||
|
||||
dest_value->data[0].v_pointer = g_string_free (s, FALSE);
|
||||
}
|
||||
|
||||
/* comparison functions */
|
||||
|
||||
static int
|
||||
|
@ -460,6 +496,18 @@ gst_value_compare_double (const GValue *value1, const GValue *value2)
|
|||
return GST_VALUE_UNORDERED;
|
||||
}
|
||||
|
||||
static int
|
||||
gst_value_compare_float (const GValue *value1, const GValue *value2)
|
||||
{
|
||||
if (value1->data[0].v_float > value2->data[0].v_float)
|
||||
return GST_VALUE_GREATER_THAN;
|
||||
if (value1->data[0].v_float < value2->data[0].v_float)
|
||||
return GST_VALUE_LESS_THAN;
|
||||
if (value1->data[0].v_float == value2->data[0].v_float)
|
||||
return GST_VALUE_EQUAL;
|
||||
return GST_VALUE_UNORDERED;
|
||||
}
|
||||
|
||||
static int
|
||||
gst_value_compare_string (const GValue *value1, const GValue *value2)
|
||||
{
|
||||
|
@ -472,10 +520,53 @@ gst_value_compare_string (const GValue *value1, const GValue *value2)
|
|||
static int
|
||||
gst_value_compare_fourcc (const GValue *value1, const GValue *value2)
|
||||
{
|
||||
g_print("comparing fourccs\n");
|
||||
if (value2->data[0].v_int == value1->data[0].v_int) return GST_VALUE_EQUAL;
|
||||
return GST_VALUE_UNORDERED;
|
||||
}
|
||||
|
||||
static int
|
||||
gst_value_compare_int_range (const GValue *value1, const GValue *value2)
|
||||
{
|
||||
if (value2->data[0].v_int == value1->data[0].v_int &&
|
||||
value2->data[0].v_int == value1->data[0].v_int) return GST_VALUE_EQUAL;
|
||||
return GST_VALUE_UNORDERED;
|
||||
}
|
||||
|
||||
static int
|
||||
gst_value_compare_double_range (const GValue *value1, const GValue *value2)
|
||||
{
|
||||
if (value2->data[0].v_double == value1->data[0].v_double &&
|
||||
value2->data[0].v_double == value1->data[0].v_double)
|
||||
return GST_VALUE_EQUAL;
|
||||
return GST_VALUE_UNORDERED;
|
||||
}
|
||||
|
||||
static int
|
||||
gst_value_compare_list (const GValue *value1, const GValue *value2)
|
||||
{
|
||||
int i,j;
|
||||
GArray *array1 = value1->data[0].v_pointer;
|
||||
GArray *array2 = value2->data[0].v_pointer;
|
||||
GValue *v1;
|
||||
GValue *v2;
|
||||
|
||||
if (array1->len != array2->len) return GST_VALUE_UNORDERED;
|
||||
|
||||
for(i=0;i<array1->len;i++){
|
||||
v1 = &g_array_index (array1, GValue, i);
|
||||
for(j=0;j<array1->len;j++){
|
||||
v2 = &g_array_index (array2, GValue, j);
|
||||
if (gst_value_compare(v1, v2) == GST_VALUE_EQUAL) break;
|
||||
}
|
||||
if (j==array1->len) {
|
||||
return GST_VALUE_UNORDERED;
|
||||
}
|
||||
}
|
||||
|
||||
return GST_VALUE_EQUAL;
|
||||
}
|
||||
|
||||
gboolean
|
||||
gst_value_can_compare (const GValue *value1, const GValue *value2)
|
||||
{
|
||||
|
@ -498,7 +589,8 @@ gst_value_compare (const GValue *value1, const GValue *value2)
|
|||
GstValueCompareInfo *compare_info;
|
||||
int i;
|
||||
|
||||
g_return_val_if_fail(G_VALUE_TYPE(value1) == G_VALUE_TYPE(value2), 0);
|
||||
if (G_VALUE_TYPE(value1) != G_VALUE_TYPE(value2)) return GST_VALUE_UNORDERED;
|
||||
|
||||
for(i=0;i<gst_value_compare_funcs->len;i++){
|
||||
compare_info = &g_array_index(gst_value_compare_funcs,
|
||||
GstValueCompareInfo, i);
|
||||
|
@ -507,7 +599,8 @@ gst_value_compare (const GValue *value1, const GValue *value2)
|
|||
return compare_info->func(value1, value2);
|
||||
}
|
||||
|
||||
g_return_val_if_fail(0 /* type not found */, GST_VALUE_UNORDERED);
|
||||
g_critical("unable to compare values of type %s\n",
|
||||
g_type_name (G_VALUE_TYPE (value1)));
|
||||
return GST_VALUE_UNORDERED;
|
||||
}
|
||||
|
||||
|
@ -633,23 +726,31 @@ gst_value_intersect (GValue *dest, const GValue *value1, const GValue *value2)
|
|||
{
|
||||
GstValueIntersectInfo *intersect_info;
|
||||
int i;
|
||||
int ret = FALSE;
|
||||
|
||||
g_print("intersecting %s=%s and %s=%s\n",
|
||||
g_type_name(G_VALUE_TYPE(value1)), g_strdup_value_contents(value1),
|
||||
g_type_name(G_VALUE_TYPE(value2)), g_strdup_value_contents(value2));
|
||||
for(i=0;i<gst_value_intersect_funcs->len;i++){
|
||||
intersect_info = &g_array_index(gst_value_intersect_funcs,
|
||||
GstValueIntersectInfo, i);
|
||||
if(intersect_info->type1 == G_VALUE_TYPE(value1) &&
|
||||
intersect_info->type2 == G_VALUE_TYPE(value2)) {
|
||||
return intersect_info->func(dest, value1, value2);
|
||||
ret = intersect_info->func(dest, value1, value2);
|
||||
g_print("result is %d %s\n", ret, ret?g_strdup_value_contents(dest):"none1");
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
if(gst_value_compare(value1, value2) == GST_VALUE_EQUAL){
|
||||
g_value_init(dest, G_VALUE_TYPE(value1));
|
||||
g_value_copy(value1, dest);
|
||||
return TRUE;
|
||||
ret = TRUE;
|
||||
g_print("result is %d %s\n", ret, ret?g_strdup_value_contents(dest):"none2");
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
g_print("result is %d %s\n", ret, ret?g_strdup_value_contents(dest):"none3");
|
||||
return ret;
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -746,14 +847,22 @@ _gst_value_initialize (void)
|
|||
gst_value_transform_fourcc_string);
|
||||
g_value_register_transform_func (GST_TYPE_INT_RANGE, G_TYPE_STRING,
|
||||
gst_value_transform_int_range_string);
|
||||
g_value_register_transform_func (GST_TYPE_DOUBLE_RANGE, G_TYPE_STRING,
|
||||
gst_value_transform_double_range_string);
|
||||
g_value_register_transform_func (GST_TYPE_LIST, G_TYPE_STRING,
|
||||
gst_value_transform_list_string);
|
||||
|
||||
gst_value_compare_funcs = g_array_new(FALSE, FALSE,
|
||||
sizeof(GstValueCompareInfo));
|
||||
|
||||
gst_value_register_compare_func (G_TYPE_INT, gst_value_compare_int);
|
||||
gst_value_register_compare_func (G_TYPE_FLOAT, gst_value_compare_float);
|
||||
gst_value_register_compare_func (G_TYPE_DOUBLE, gst_value_compare_double);
|
||||
gst_value_register_compare_func (G_TYPE_STRING, gst_value_compare_string);
|
||||
gst_value_register_compare_func (GST_TYPE_FOURCC, gst_value_compare_fourcc);
|
||||
gst_value_register_compare_func (GST_TYPE_INT_RANGE, gst_value_compare_int_range);
|
||||
gst_value_register_compare_func (GST_TYPE_DOUBLE_RANGE, gst_value_compare_double_range);
|
||||
gst_value_register_compare_func (GST_TYPE_LIST, gst_value_compare_list);
|
||||
|
||||
gst_value_union_funcs = g_array_new(FALSE, FALSE,
|
||||
sizeof(GstValueUnionInfo));
|
||||
|
|
Loading…
Reference in a new issue