mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-29 21:21:12 +00:00
Rearrange lots of code. Change registration of compare function into registration of compare/serialize/deserialize f...
Original commit message from CVS: Rearrange lots of code. Change registration of compare function into registration of compare/serialize/deserialize functions.
This commit is contained in:
parent
a95a3d2064
commit
63079b12bc
3 changed files with 583 additions and 269 deletions
|
@ -1,3 +1,12 @@
|
||||||
|
2003-12-23 David Schleef <ds@schleef.org>
|
||||||
|
|
||||||
|
* gst/gstvalue.c:
|
||||||
|
* gst/gstvalue.h:
|
||||||
|
Rearrange lots of code. Change registration of compare function
|
||||||
|
into registration of compare/serialize/deserialize functions.
|
||||||
|
Doesn't include implementation of gst_value_[de]serialize(),
|
||||||
|
but that should be easy.
|
||||||
|
|
||||||
2003-12-23 Thomas Vander Stichele <thomas at apestaart dot org>
|
2003-12-23 Thomas Vander Stichele <thomas at apestaart dot org>
|
||||||
|
|
||||||
* docs/gst/gstreamer-sections.txt:
|
* docs/gst/gstreamer-sections.txt:
|
||||||
|
|
770
gst/gstvalue.c
770
gst/gstvalue.c
|
@ -25,11 +25,6 @@
|
||||||
#include <gst/gst.h>
|
#include <gst/gst.h>
|
||||||
#include <gobject/gvaluecollector.h>
|
#include <gobject/gvaluecollector.h>
|
||||||
|
|
||||||
typedef struct _GstValueCompareInfo GstValueCompareInfo;
|
|
||||||
struct _GstValueCompareInfo {
|
|
||||||
GType type;
|
|
||||||
GstValueCompareFunc func;
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct _GstValueUnionInfo GstValueUnionInfo;
|
typedef struct _GstValueUnionInfo GstValueUnionInfo;
|
||||||
struct _GstValueUnionInfo {
|
struct _GstValueUnionInfo {
|
||||||
|
@ -50,10 +45,11 @@ GType gst_type_int_range;
|
||||||
GType gst_type_double_range;
|
GType gst_type_double_range;
|
||||||
GType gst_type_list;
|
GType gst_type_list;
|
||||||
|
|
||||||
GArray *gst_value_compare_funcs;
|
static GArray *gst_value_table;
|
||||||
GArray *gst_value_union_funcs;
|
static GArray *gst_value_union_funcs;
|
||||||
GArray *gst_value_intersect_funcs;
|
static GArray *gst_value_intersect_funcs;
|
||||||
|
|
||||||
|
/*************************************/
|
||||||
/* list */
|
/* list */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -136,6 +132,10 @@ gst_value_lcopy_list (const GValue *value, guint n_collect_values,
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_value_list_prepend_value:
|
||||||
|
*
|
||||||
|
*/
|
||||||
void
|
void
|
||||||
gst_value_list_prepend_value (GValue *value, const GValue *prepend_value)
|
gst_value_list_prepend_value (GValue *value, const GValue *prepend_value)
|
||||||
{
|
{
|
||||||
|
@ -144,6 +144,10 @@ gst_value_list_prepend_value (GValue *value, const GValue *prepend_value)
|
||||||
g_array_prepend_vals ((GArray *) value->data[0].v_pointer, prepend_value, 1);
|
g_array_prepend_vals ((GArray *) value->data[0].v_pointer, prepend_value, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_value_list_append_value:
|
||||||
|
*
|
||||||
|
*/
|
||||||
void
|
void
|
||||||
gst_value_list_append_value (GValue *value, const GValue *append_value)
|
gst_value_list_append_value (GValue *value, const GValue *append_value)
|
||||||
{
|
{
|
||||||
|
@ -152,6 +156,10 @@ gst_value_list_append_value (GValue *value, const GValue *append_value)
|
||||||
g_array_append_vals ((GArray *) value->data[0].v_pointer, append_value, 1);
|
g_array_append_vals ((GArray *) value->data[0].v_pointer, append_value, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_value_list_get_size:
|
||||||
|
*
|
||||||
|
*/
|
||||||
guint
|
guint
|
||||||
gst_value_list_get_size (const GValue *value)
|
gst_value_list_get_size (const GValue *value)
|
||||||
{
|
{
|
||||||
|
@ -160,6 +168,10 @@ gst_value_list_get_size (const GValue *value)
|
||||||
return ((GArray *) value->data[0].v_pointer)->len;
|
return ((GArray *) value->data[0].v_pointer)->len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_value_list_get_value:
|
||||||
|
*
|
||||||
|
*/
|
||||||
const GValue *
|
const GValue *
|
||||||
gst_value_list_get_value (const GValue *value, guint index)
|
gst_value_list_get_value (const GValue *value, guint index)
|
||||||
{
|
{
|
||||||
|
@ -215,6 +227,74 @@ gst_value_list_concat (GValue *dest, const GValue *value1, const GValue *value2)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
static char *
|
||||||
|
gst_value_serialize_list (const GValue *value)
|
||||||
|
{
|
||||||
|
g_warning("unimplemented");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
gst_value_deserialize_list (GValue *dest, const char *s)
|
||||||
|
{
|
||||||
|
g_warning("unimplemented");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*************************************/
|
||||||
/* fourcc */
|
/* fourcc */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -253,6 +333,10 @@ gst_value_lcopy_fourcc (const GValue *value, guint n_collect_values,
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_value_set_fourcc:
|
||||||
|
*
|
||||||
|
*/
|
||||||
void
|
void
|
||||||
gst_value_set_fourcc (GValue *value, guint32 fourcc)
|
gst_value_set_fourcc (GValue *value, guint32 fourcc)
|
||||||
{
|
{
|
||||||
|
@ -261,6 +345,10 @@ gst_value_set_fourcc (GValue *value, guint32 fourcc)
|
||||||
value->data[0].v_int = fourcc;
|
value->data[0].v_int = fourcc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_value_get_fourcc:
|
||||||
|
*
|
||||||
|
*/
|
||||||
guint32
|
guint32
|
||||||
gst_value_get_fourcc (const GValue *value)
|
gst_value_get_fourcc (const GValue *value)
|
||||||
{
|
{
|
||||||
|
@ -269,6 +357,45 @@ gst_value_get_fourcc (const GValue *value)
|
||||||
return value->data[0].v_int;
|
return value->data[0].v_int;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gst_value_transform_fourcc_string (const GValue *src_value,
|
||||||
|
GValue *dest_value)
|
||||||
|
{
|
||||||
|
guint32 fourcc = src_value->data[0].v_int;
|
||||||
|
|
||||||
|
if (g_ascii_isprint ((fourcc>>0) & 0xff) &&
|
||||||
|
g_ascii_isprint ((fourcc>>8) & 0xff) &&
|
||||||
|
g_ascii_isprint ((fourcc>>16) & 0xff) &&
|
||||||
|
g_ascii_isprint ((fourcc>>24) & 0xff)){
|
||||||
|
dest_value->data[0].v_pointer = g_strdup_printf(
|
||||||
|
GST_FOURCC_FORMAT, GST_FOURCC_ARGS(fourcc));
|
||||||
|
} else {
|
||||||
|
dest_value->data[0].v_pointer = g_strdup_printf("0x%08x", fourcc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
gst_value_compare_fourcc (const GValue *value1, const GValue *value2)
|
||||||
|
{
|
||||||
|
if (value2->data[0].v_int == value1->data[0].v_int) return GST_VALUE_EQUAL;
|
||||||
|
return GST_VALUE_UNORDERED;
|
||||||
|
}
|
||||||
|
|
||||||
|
static char *
|
||||||
|
gst_value_serialize_fourcc (const GValue *value)
|
||||||
|
{
|
||||||
|
g_warning("unimplemented");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
gst_value_deserialize_fourcc (GValue *dest, const char *s)
|
||||||
|
{
|
||||||
|
g_warning("unimplemented");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*************************************/
|
||||||
/* int range */
|
/* int range */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -316,6 +443,10 @@ gst_value_lcopy_int_range (const GValue *value, guint n_collect_values,
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_value_set_int_range:
|
||||||
|
*
|
||||||
|
*/
|
||||||
void
|
void
|
||||||
gst_value_set_int_range (GValue *value, int start, int end)
|
gst_value_set_int_range (GValue *value, int start, int end)
|
||||||
{
|
{
|
||||||
|
@ -325,6 +456,10 @@ gst_value_set_int_range (GValue *value, int start, int end)
|
||||||
value->data[1].v_int = end;
|
value->data[1].v_int = end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_value_get_int_range_min:
|
||||||
|
*
|
||||||
|
*/
|
||||||
int
|
int
|
||||||
gst_value_get_int_range_min (const GValue *value)
|
gst_value_get_int_range_min (const GValue *value)
|
||||||
{
|
{
|
||||||
|
@ -333,6 +468,10 @@ gst_value_get_int_range_min (const GValue *value)
|
||||||
return value->data[0].v_int;
|
return value->data[0].v_int;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_value_get_int_range_max:
|
||||||
|
*
|
||||||
|
*/
|
||||||
int
|
int
|
||||||
gst_value_get_int_range_max (const GValue *value)
|
gst_value_get_int_range_max (const GValue *value)
|
||||||
{
|
{
|
||||||
|
@ -341,6 +480,37 @@ gst_value_get_int_range_max (const GValue *value)
|
||||||
return value->data[1].v_int;
|
return value->data[1].v_int;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gst_value_transform_int_range_string (const GValue *src_value,
|
||||||
|
GValue *dest_value)
|
||||||
|
{
|
||||||
|
dest_value->data[0].v_pointer = g_strdup_printf("[%d,%d]",
|
||||||
|
(int)src_value->data[0].v_int, (int)src_value->data[1].v_int);
|
||||||
|
}
|
||||||
|
|
||||||
|
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 char *
|
||||||
|
gst_value_serialize_int_range (const GValue *value)
|
||||||
|
{
|
||||||
|
g_warning("unimplemented");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
gst_value_deserialize_int_range (GValue *dest, const char *s)
|
||||||
|
{
|
||||||
|
g_warning("unimplemented");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*************************************/
|
||||||
/* double range */
|
/* double range */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -387,6 +557,10 @@ gst_value_lcopy_double_range (const GValue *value, guint n_collect_values,
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_value_set_double_range:
|
||||||
|
*
|
||||||
|
*/
|
||||||
void
|
void
|
||||||
gst_value_set_double_range (GValue *value, double start, double end)
|
gst_value_set_double_range (GValue *value, double start, double end)
|
||||||
{
|
{
|
||||||
|
@ -396,6 +570,10 @@ gst_value_set_double_range (GValue *value, double start, double end)
|
||||||
value->data[1].v_double = end;
|
value->data[1].v_double = end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_value_get_double_range_min:
|
||||||
|
*
|
||||||
|
*/
|
||||||
double
|
double
|
||||||
gst_value_get_double_range_min (const GValue *value)
|
gst_value_get_double_range_min (const GValue *value)
|
||||||
{
|
{
|
||||||
|
@ -404,6 +582,10 @@ gst_value_get_double_range_min (const GValue *value)
|
||||||
return value->data[0].v_double;
|
return value->data[0].v_double;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_value_get_double_range_max:
|
||||||
|
*
|
||||||
|
*/
|
||||||
double
|
double
|
||||||
gst_value_get_double_range_max (const GValue *value)
|
gst_value_get_double_range_max (const GValue *value)
|
||||||
{
|
{
|
||||||
|
@ -412,51 +594,6 @@ gst_value_get_double_range_max (const GValue *value)
|
||||||
return value->data[1].v_double;
|
return value->data[1].v_double;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* GstCaps */
|
|
||||||
|
|
||||||
void
|
|
||||||
gst_value_set_caps (GValue *value, const GstCaps *caps)
|
|
||||||
{
|
|
||||||
g_return_if_fail (GST_VALUE_HOLDS_CAPS (value));
|
|
||||||
|
|
||||||
value->data[0].v_pointer = gst_caps_copy (caps);
|
|
||||||
}
|
|
||||||
|
|
||||||
const GstCaps *
|
|
||||||
gst_value_get_caps (const GValue *value)
|
|
||||||
{
|
|
||||||
g_return_val_if_fail (GST_VALUE_HOLDS_CAPS (value), 0);
|
|
||||||
|
|
||||||
return value->data[0].v_pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* fourcc */
|
|
||||||
|
|
||||||
static void
|
|
||||||
gst_value_transform_fourcc_string (const GValue *src_value,
|
|
||||||
GValue *dest_value)
|
|
||||||
{
|
|
||||||
guint32 fourcc = src_value->data[0].v_int;
|
|
||||||
|
|
||||||
if (g_ascii_isprint ((fourcc>>0) & 0xff) &&
|
|
||||||
g_ascii_isprint ((fourcc>>8) & 0xff) &&
|
|
||||||
g_ascii_isprint ((fourcc>>16) & 0xff) &&
|
|
||||||
g_ascii_isprint ((fourcc>>24) & 0xff)){
|
|
||||||
dest_value->data[0].v_pointer = g_strdup_printf(
|
|
||||||
GST_FOURCC_FORMAT, GST_FOURCC_ARGS(fourcc));
|
|
||||||
} else {
|
|
||||||
dest_value->data[0].v_pointer = g_strdup_printf("0x%08x", fourcc);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
gst_value_transform_int_range_string (const GValue *src_value,
|
|
||||||
GValue *dest_value)
|
|
||||||
{
|
|
||||||
dest_value->data[0].v_pointer = g_strdup_printf("[%d,%d]",
|
|
||||||
(int)src_value->data[0].v_int, (int)src_value->data[1].v_int);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_value_transform_double_range_string (const GValue *src_value,
|
gst_value_transform_double_range_string (const GValue *src_value,
|
||||||
GValue *dest_value)
|
GValue *dest_value)
|
||||||
|
@ -470,45 +607,84 @@ gst_value_transform_double_range_string (const GValue *src_value,
|
||||||
src_value->data[1].v_double));
|
src_value->data[1].v_double));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static int
|
||||||
gst_value_transform_list_string (const GValue *src_value,
|
gst_value_compare_double_range (const GValue *value1, const GValue *value2)
|
||||||
GValue *dest_value)
|
|
||||||
{
|
{
|
||||||
GValue *list_value;
|
if (value2->data[0].v_double == value1->data[0].v_double &&
|
||||||
GArray *array;
|
value2->data[0].v_double == value1->data[0].v_double)
|
||||||
GString *s;
|
return GST_VALUE_EQUAL;
|
||||||
int i;
|
return GST_VALUE_UNORDERED;
|
||||||
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 char *
|
||||||
|
gst_value_serialize_double_range (const GValue *value)
|
||||||
|
{
|
||||||
|
g_warning("unimplemented");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
gst_value_deserialize_double_range (GValue *dest, const char *s)
|
||||||
|
{
|
||||||
|
g_warning("unimplemented");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*************************************/
|
||||||
|
/* GstCaps */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_value_set_caps:
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
gst_value_set_caps (GValue *value, const GstCaps *caps)
|
||||||
|
{
|
||||||
|
g_return_if_fail (GST_VALUE_HOLDS_CAPS (value));
|
||||||
|
|
||||||
|
value->data[0].v_pointer = gst_caps_copy (caps);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_value_get_caps:
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
const GstCaps *
|
||||||
|
gst_value_get_caps (const GValue *value)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (GST_VALUE_HOLDS_CAPS (value), 0);
|
||||||
|
|
||||||
|
return value->data[0].v_pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*************************************/
|
||||||
|
/* boolean */
|
||||||
|
|
||||||
static int
|
static int
|
||||||
gst_value_compare_boolean (const GValue *value1, const GValue *value2)
|
gst_value_compare_boolean (const GValue *value1, const GValue *value2)
|
||||||
{
|
{
|
||||||
/* FIXME: ds, can we assume that those values are only TRUE and FALSE? */
|
if ((value1->data[0].v_int!=0) == (value2->data[0].v_int!=0))
|
||||||
if (value1->data[0].v_int == value2->data[0].v_int)
|
|
||||||
return GST_VALUE_EQUAL;
|
return GST_VALUE_EQUAL;
|
||||||
return GST_VALUE_UNORDERED;
|
return GST_VALUE_UNORDERED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char *
|
||||||
|
gst_value_serialize_boolean (const GValue *value)
|
||||||
|
{
|
||||||
|
g_warning("unimplemented");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
gst_value_deserialize_boolean (GValue *dest, const char *s)
|
||||||
|
{
|
||||||
|
g_warning("unimplemented");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*************************************/
|
||||||
|
/* int */
|
||||||
|
|
||||||
static int
|
static int
|
||||||
gst_value_compare_int (const GValue *value1, const GValue *value2)
|
gst_value_compare_int (const GValue *value1, const GValue *value2)
|
||||||
{
|
{
|
||||||
|
@ -519,6 +695,23 @@ gst_value_compare_int (const GValue *value1, const GValue *value2)
|
||||||
return GST_VALUE_EQUAL;
|
return GST_VALUE_EQUAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char *
|
||||||
|
gst_value_serialize_int (const GValue *value)
|
||||||
|
{
|
||||||
|
g_warning("unimplemented");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
gst_value_deserialize_int (GValue *dest, const char *s)
|
||||||
|
{
|
||||||
|
g_warning("unimplemented");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*************************************/
|
||||||
|
/* double */
|
||||||
|
|
||||||
static int
|
static int
|
||||||
gst_value_compare_double (const GValue *value1, const GValue *value2)
|
gst_value_compare_double (const GValue *value1, const GValue *value2)
|
||||||
{
|
{
|
||||||
|
@ -531,18 +724,23 @@ gst_value_compare_double (const GValue *value1, const GValue *value2)
|
||||||
return GST_VALUE_UNORDERED;
|
return GST_VALUE_UNORDERED;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static char *
|
||||||
gst_value_compare_float (const GValue *value1, const GValue *value2)
|
gst_value_serialize_double (const GValue *value)
|
||||||
{
|
{
|
||||||
if (value1->data[0].v_float > value2->data[0].v_float)
|
g_warning("unimplemented");
|
||||||
return GST_VALUE_GREATER_THAN;
|
return NULL;
|
||||||
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 gboolean
|
||||||
|
gst_value_deserialize_double (GValue *dest, const char *s)
|
||||||
|
{
|
||||||
|
g_warning("unimplemented");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*************************************/
|
||||||
|
/* string */
|
||||||
|
|
||||||
static int
|
static int
|
||||||
gst_value_compare_string (const GValue *value1, const GValue *value2)
|
gst_value_compare_string (const GValue *value1, const GValue *value2)
|
||||||
{
|
{
|
||||||
|
@ -552,150 +750,24 @@ gst_value_compare_string (const GValue *value1, const GValue *value2)
|
||||||
return GST_VALUE_EQUAL;
|
return GST_VALUE_EQUAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static char *
|
||||||
gst_value_compare_fourcc (const GValue *value1, const GValue *value2)
|
gst_value_serialize_string (const GValue *value)
|
||||||
{
|
{
|
||||||
if (value2->data[0].v_int == value1->data[0].v_int) return GST_VALUE_EQUAL;
|
g_warning("unimplemented");
|
||||||
return GST_VALUE_UNORDERED;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static gboolean
|
||||||
gst_value_compare_int_range (const GValue *value1, const GValue *value2)
|
gst_value_deserialize_string (GValue *dest, const char *s)
|
||||||
{
|
{
|
||||||
if (value2->data[0].v_int == value1->data[0].v_int &&
|
g_warning("unimplemented");
|
||||||
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)
|
|
||||||
{
|
|
||||||
GstValueCompareInfo *compare_info;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
if(G_VALUE_TYPE(value1) != G_VALUE_TYPE(value2))return FALSE;
|
|
||||||
for(i=0;i<gst_value_compare_funcs->len;i++){
|
|
||||||
compare_info = &g_array_index(gst_value_compare_funcs,
|
|
||||||
GstValueCompareInfo, i);
|
|
||||||
if(compare_info->type == G_VALUE_TYPE(value1)) return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
/*************************************/
|
||||||
gst_value_compare (const GValue *value1, const GValue *value2)
|
/* unions */
|
||||||
{
|
|
||||||
GstValueCompareInfo *compare_info;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
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);
|
|
||||||
if(compare_info->type != G_VALUE_TYPE(value1)) continue;
|
|
||||||
|
|
||||||
return compare_info->func(value1, value2);
|
|
||||||
}
|
|
||||||
|
|
||||||
g_critical("unable to compare values of type %s\n",
|
|
||||||
g_type_name (G_VALUE_TYPE (value1)));
|
|
||||||
return GST_VALUE_UNORDERED;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
gst_value_register_compare_func (GType type, GstValueCompareFunc func)
|
|
||||||
{
|
|
||||||
GstValueCompareInfo compare_info;
|
|
||||||
|
|
||||||
compare_info.type = type;
|
|
||||||
compare_info.func = func;
|
|
||||||
|
|
||||||
g_array_append_val(gst_value_compare_funcs, compare_info);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* union */
|
|
||||||
|
|
||||||
gboolean
|
|
||||||
gst_value_can_union (const GValue *value1, const GValue *value2)
|
|
||||||
{
|
|
||||||
GstValueUnionInfo *union_info;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for(i=0;i<gst_value_union_funcs->len;i++){
|
|
||||||
union_info = &g_array_index(gst_value_union_funcs, GstValueUnionInfo, i);
|
|
||||||
if(union_info->type1 == G_VALUE_TYPE(value1) &&
|
|
||||||
union_info->type2 == G_VALUE_TYPE(value2)) return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
gboolean
|
|
||||||
gst_value_union (GValue *dest, const GValue *value1, const GValue *value2)
|
|
||||||
{
|
|
||||||
GstValueUnionInfo *union_info;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for(i=0;i<gst_value_union_funcs->len;i++){
|
|
||||||
union_info = &g_array_index(gst_value_union_funcs, GstValueUnionInfo, i);
|
|
||||||
if(union_info->type1 == G_VALUE_TYPE(value1) &&
|
|
||||||
union_info->type2 == G_VALUE_TYPE(value2)) {
|
|
||||||
return union_info->func(dest, value1, value2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
gst_value_list_concat (dest, value1, value2);
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
gst_value_register_union_func (GType type1, GType type2, GstValueUnionFunc func)
|
|
||||||
{
|
|
||||||
GstValueUnionInfo union_info;
|
|
||||||
|
|
||||||
union_info.type1 = type1;
|
|
||||||
union_info.type2 = type2;
|
|
||||||
union_info.func = func;
|
|
||||||
|
|
||||||
g_array_append_val(gst_value_union_funcs, union_info);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
/*************************************/
|
||||||
/* intersection */
|
/* intersection */
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
|
@ -818,6 +890,119 @@ gst_value_intersect_list (GValue *dest, const GValue *value1, const GValue *valu
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_value_can_compare:
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
gboolean
|
||||||
|
gst_value_can_compare (const GValue *value1, const GValue *value2)
|
||||||
|
{
|
||||||
|
GstValueTable *table;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if(G_VALUE_TYPE(value1) != G_VALUE_TYPE(value2))return FALSE;
|
||||||
|
for(i=0;i<gst_value_table->len;i++){
|
||||||
|
table = &g_array_index(gst_value_table, GstValueTable, i);
|
||||||
|
if(table->type == G_VALUE_TYPE(value1) &&
|
||||||
|
table->compare) return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_value_compare:
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
gst_value_compare (const GValue *value1, const GValue *value2)
|
||||||
|
{
|
||||||
|
GstValueTable *table;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (G_VALUE_TYPE(value1) != G_VALUE_TYPE(value2)) return GST_VALUE_UNORDERED;
|
||||||
|
|
||||||
|
for(i=0;i<gst_value_table->len;i++){
|
||||||
|
table = &g_array_index(gst_value_table, GstValueTable, i);
|
||||||
|
if(table->type != G_VALUE_TYPE(value1) ||
|
||||||
|
table->compare == NULL) continue;
|
||||||
|
|
||||||
|
return table->compare(value1, value2);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_critical("unable to compare values of type %s\n",
|
||||||
|
g_type_name (G_VALUE_TYPE (value1)));
|
||||||
|
return GST_VALUE_UNORDERED;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* union */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_value_can_union:
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
gboolean
|
||||||
|
gst_value_can_union (const GValue *value1, const GValue *value2)
|
||||||
|
{
|
||||||
|
GstValueUnionInfo *union_info;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for(i=0;i<gst_value_union_funcs->len;i++){
|
||||||
|
union_info = &g_array_index(gst_value_union_funcs, GstValueUnionInfo, i);
|
||||||
|
if(union_info->type1 == G_VALUE_TYPE(value1) &&
|
||||||
|
union_info->type2 == G_VALUE_TYPE(value2)) return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_value_union:
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
gboolean
|
||||||
|
gst_value_union (GValue *dest, const GValue *value1, const GValue *value2)
|
||||||
|
{
|
||||||
|
GstValueUnionInfo *union_info;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for(i=0;i<gst_value_union_funcs->len;i++){
|
||||||
|
union_info = &g_array_index(gst_value_union_funcs, GstValueUnionInfo, i);
|
||||||
|
if(union_info->type1 == G_VALUE_TYPE(value1) &&
|
||||||
|
union_info->type2 == G_VALUE_TYPE(value2)) {
|
||||||
|
return union_info->func(dest, value1, value2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
gst_value_list_concat (dest, value1, value2);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_value_register_union_func:
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
gst_value_register_union_func (GType type1, GType type2, GstValueUnionFunc func)
|
||||||
|
{
|
||||||
|
GstValueUnionInfo union_info;
|
||||||
|
|
||||||
|
union_info.type1 = type1;
|
||||||
|
union_info.type2 = type2;
|
||||||
|
union_info.func = func;
|
||||||
|
|
||||||
|
g_array_append_val(gst_value_union_funcs, union_info);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* intersection */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_value_can_intersect:
|
||||||
|
*
|
||||||
|
*/
|
||||||
gboolean
|
gboolean
|
||||||
gst_value_can_intersect (const GValue *value1, const GValue *value2)
|
gst_value_can_intersect (const GValue *value1, const GValue *value2)
|
||||||
{
|
{
|
||||||
|
@ -839,6 +1024,10 @@ gst_value_can_intersect (const GValue *value1, const GValue *value2)
|
||||||
return gst_value_can_compare (value1, value2);
|
return gst_value_can_compare (value1, value2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_value_intersect:
|
||||||
|
*
|
||||||
|
*/
|
||||||
gboolean
|
gboolean
|
||||||
gst_value_intersect (GValue *dest, const GValue *value1, const GValue *value2)
|
gst_value_intersect (GValue *dest, const GValue *value1, const GValue *value2)
|
||||||
{
|
{
|
||||||
|
@ -875,13 +1064,10 @@ gst_value_intersect (GValue *dest, const GValue *value1, const GValue *value2)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
/**
|
||||||
gst_value_init_and_copy (GValue *dest, const GValue *src)
|
* gst_value_register_intersection_func:
|
||||||
{
|
*
|
||||||
g_value_init (dest, G_VALUE_TYPE(src));
|
*/
|
||||||
g_value_copy (src, dest);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
gst_value_register_intersect_func (GType type1, GType type2,
|
gst_value_register_intersect_func (GType type1, GType type2,
|
||||||
GstValueIntersectFunc func)
|
GstValueIntersectFunc func)
|
||||||
|
@ -895,6 +1081,27 @@ gst_value_register_intersect_func (GType type1, GType type2,
|
||||||
g_array_append_val(gst_value_intersect_funcs, intersect_info);
|
g_array_append_val(gst_value_intersect_funcs, intersect_info);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_value_register:
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
gst_value_register (const GstValueTable *table)
|
||||||
|
{
|
||||||
|
g_array_append_val(gst_value_table, *table);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_value_init_and_copy:
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
gst_value_init_and_copy (GValue *dest, const GValue *src)
|
||||||
|
{
|
||||||
|
g_value_init (dest, G_VALUE_TYPE(src));
|
||||||
|
g_value_copy (src, dest);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
_gst_value_initialize (void)
|
_gst_value_initialize (void)
|
||||||
{
|
{
|
||||||
|
@ -912,6 +1119,12 @@ _gst_value_initialize (void)
|
||||||
};
|
};
|
||||||
//const GTypeFundamentalInfo finfo = { G_TYPE_FLAG_DERIVABLE, };
|
//const GTypeFundamentalInfo finfo = { G_TYPE_FLAG_DERIVABLE, };
|
||||||
|
|
||||||
|
gst_value_table = g_array_new(FALSE, FALSE, sizeof(GstValueTable));
|
||||||
|
gst_value_union_funcs = g_array_new(FALSE, FALSE,
|
||||||
|
sizeof(GstValueUnionInfo));
|
||||||
|
gst_value_intersect_funcs = g_array_new(FALSE, FALSE,
|
||||||
|
sizeof(GstValueIntersectInfo));
|
||||||
|
|
||||||
{
|
{
|
||||||
static const GTypeValueTable value_table = {
|
static const GTypeValueTable value_table = {
|
||||||
gst_value_init_fourcc,
|
gst_value_init_fourcc,
|
||||||
|
@ -923,8 +1136,16 @@ _gst_value_initialize (void)
|
||||||
"p",
|
"p",
|
||||||
gst_value_lcopy_fourcc
|
gst_value_lcopy_fourcc
|
||||||
};
|
};
|
||||||
|
static GstValueTable gst_value = {
|
||||||
|
0,
|
||||||
|
gst_value_compare_fourcc,
|
||||||
|
gst_value_serialize_fourcc,
|
||||||
|
gst_value_deserialize_fourcc,
|
||||||
|
};
|
||||||
info.value_table = &value_table;
|
info.value_table = &value_table;
|
||||||
gst_type_fourcc = g_type_register_static (G_TYPE_BOXED, "GstFourcc", &info, 0);
|
gst_type_fourcc = g_type_register_static (G_TYPE_BOXED, "GstFourcc", &info, 0);
|
||||||
|
gst_value.type = gst_type_int_range;
|
||||||
|
gst_value_register (&gst_value);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -938,8 +1159,16 @@ _gst_value_initialize (void)
|
||||||
"pp",
|
"pp",
|
||||||
gst_value_lcopy_int_range
|
gst_value_lcopy_int_range
|
||||||
};
|
};
|
||||||
|
static GstValueTable gst_value = {
|
||||||
|
0,
|
||||||
|
gst_value_compare_int_range,
|
||||||
|
gst_value_serialize_int_range,
|
||||||
|
gst_value_deserialize_int_range,
|
||||||
|
};
|
||||||
info.value_table = &value_table;
|
info.value_table = &value_table;
|
||||||
gst_type_int_range = g_type_register_static (G_TYPE_BOXED, "GstIntRange", &info, 0);
|
gst_type_int_range = g_type_register_static (G_TYPE_BOXED, "GstIntRange", &info, 0);
|
||||||
|
gst_value.type = gst_type_int_range;
|
||||||
|
gst_value_register (&gst_value);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -953,8 +1182,16 @@ _gst_value_initialize (void)
|
||||||
"pp",
|
"pp",
|
||||||
gst_value_lcopy_double_range
|
gst_value_lcopy_double_range
|
||||||
};
|
};
|
||||||
|
static GstValueTable gst_value = {
|
||||||
|
0,
|
||||||
|
gst_value_compare_double_range,
|
||||||
|
gst_value_serialize_double_range,
|
||||||
|
gst_value_deserialize_double_range,
|
||||||
|
};
|
||||||
info.value_table = &value_table;
|
info.value_table = &value_table;
|
||||||
gst_type_double_range = g_type_register_static (G_TYPE_BOXED, "GstDoubleRange", &info, 0);
|
gst_type_double_range = g_type_register_static (G_TYPE_BOXED, "GstDoubleRange", &info, 0);
|
||||||
|
gst_value.type = gst_type_double_range;
|
||||||
|
gst_value_register (&gst_value);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -968,8 +1205,56 @@ _gst_value_initialize (void)
|
||||||
"p",
|
"p",
|
||||||
gst_value_lcopy_list
|
gst_value_lcopy_list
|
||||||
};
|
};
|
||||||
|
static GstValueTable gst_value = {
|
||||||
|
0,
|
||||||
|
gst_value_compare_list,
|
||||||
|
gst_value_serialize_list,
|
||||||
|
gst_value_deserialize_list,
|
||||||
|
};
|
||||||
info.value_table = &value_table;
|
info.value_table = &value_table;
|
||||||
gst_type_list = g_type_register_static (G_TYPE_BOXED, "GstValueList", &info, 0);
|
gst_type_list = g_type_register_static (G_TYPE_BOXED, "GstValueList", &info, 0);
|
||||||
|
gst_value.type = gst_type_double_range;
|
||||||
|
gst_value_register (&gst_value);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
static const GstValueTable gst_value = {
|
||||||
|
G_TYPE_INT,
|
||||||
|
gst_value_compare_int,
|
||||||
|
gst_value_serialize_int,
|
||||||
|
gst_value_deserialize_int,
|
||||||
|
};
|
||||||
|
gst_value_register (&gst_value);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
static const GstValueTable gst_value = {
|
||||||
|
G_TYPE_DOUBLE,
|
||||||
|
gst_value_compare_double,
|
||||||
|
gst_value_serialize_double,
|
||||||
|
gst_value_deserialize_double,
|
||||||
|
};
|
||||||
|
gst_value_register (&gst_value);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
static const GstValueTable gst_value = {
|
||||||
|
G_TYPE_STRING,
|
||||||
|
gst_value_compare_string,
|
||||||
|
gst_value_serialize_string,
|
||||||
|
gst_value_deserialize_string,
|
||||||
|
};
|
||||||
|
gst_value_register (&gst_value);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
static const GstValueTable gst_value = {
|
||||||
|
G_TYPE_BOOLEAN,
|
||||||
|
gst_value_compare_boolean,
|
||||||
|
gst_value_serialize_boolean,
|
||||||
|
gst_value_deserialize_boolean,
|
||||||
|
};
|
||||||
|
gst_value_register (&gst_value);
|
||||||
}
|
}
|
||||||
|
|
||||||
g_value_register_transform_func (GST_TYPE_FOURCC, G_TYPE_STRING,
|
g_value_register_transform_func (GST_TYPE_FOURCC, G_TYPE_STRING,
|
||||||
|
@ -981,25 +1266,6 @@ _gst_value_initialize (void)
|
||||||
g_value_register_transform_func (GST_TYPE_LIST, G_TYPE_STRING,
|
g_value_register_transform_func (GST_TYPE_LIST, G_TYPE_STRING,
|
||||||
gst_value_transform_list_string);
|
gst_value_transform_list_string);
|
||||||
|
|
||||||
gst_value_compare_funcs = g_array_new(FALSE, FALSE,
|
|
||||||
sizeof(GstValueCompareInfo));
|
|
||||||
|
|
||||||
gst_value_register_compare_func (G_TYPE_BOOLEAN, gst_value_compare_boolean);
|
|
||||||
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));
|
|
||||||
|
|
||||||
gst_value_intersect_funcs = g_array_new(FALSE, FALSE,
|
|
||||||
sizeof(GstValueIntersectInfo));
|
|
||||||
|
|
||||||
gst_value_register_intersect_func (G_TYPE_INT, GST_TYPE_INT_RANGE,
|
gst_value_register_intersect_func (G_TYPE_INT, GST_TYPE_INT_RANGE,
|
||||||
gst_value_intersect_int_int_range);
|
gst_value_intersect_int_int_range);
|
||||||
gst_value_register_intersect_func (GST_TYPE_INT_RANGE, GST_TYPE_INT_RANGE,
|
gst_value_register_intersect_func (GST_TYPE_INT_RANGE, GST_TYPE_INT_RANGE,
|
||||||
|
|
|
@ -27,11 +27,24 @@ G_BEGIN_DECLS
|
||||||
|
|
||||||
typedef int (* GstValueCompareFunc) (const GValue *value1,
|
typedef int (* GstValueCompareFunc) (const GValue *value1,
|
||||||
const GValue *value2);
|
const GValue *value2);
|
||||||
|
typedef char * (* GstValueSerializeFunc) (const GValue *value1);
|
||||||
|
typedef gboolean (* GstValueDeserializeFunc) (GValue *dest, const char *s);
|
||||||
typedef int (* GstValueUnionFunc) (GValue *dest, const GValue *value1,
|
typedef int (* GstValueUnionFunc) (GValue *dest, const GValue *value1,
|
||||||
const GValue *value2);
|
const GValue *value2);
|
||||||
typedef int (* GstValueIntersectFunc) (GValue *dest, const GValue *value1,
|
typedef int (* GstValueIntersectFunc) (GValue *dest, const GValue *value1,
|
||||||
const GValue *value2);
|
const GValue *value2);
|
||||||
|
|
||||||
|
typedef struct _GstValueTable GstValueTable;
|
||||||
|
struct _GstValueTable {
|
||||||
|
GType type;
|
||||||
|
GstValueCompareFunc compare;
|
||||||
|
GstValueSerializeFunc serialize;
|
||||||
|
GstValueDeserializeFunc unserialize;
|
||||||
|
|
||||||
|
void *_gst_paddding [GST_PADDING];
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
#define GST_MAKE_FOURCC(a,b,c,d) (guint32)((a)|(b)<<8|(c)<<16|(d)<<24)
|
#define GST_MAKE_FOURCC(a,b,c,d) (guint32)((a)|(b)<<8|(c)<<16|(d)<<24)
|
||||||
#define GST_STR_FOURCC(f) (guint32)(((f)[0])|((f)[1]<<8)|((f)[2]<<16)|((f)[3]<<24))
|
#define GST_STR_FOURCC(f) (guint32)(((f)[0])|((f)[1]<<8)|((f)[2]<<16)|((f)[3]<<24))
|
||||||
|
|
||||||
|
@ -63,19 +76,7 @@ extern GType gst_type_int_range;
|
||||||
extern GType gst_type_double_range;
|
extern GType gst_type_double_range;
|
||||||
extern GType gst_type_list;
|
extern GType gst_type_list;
|
||||||
|
|
||||||
void gst_value_set_fourcc (GValue *value, guint32 fourcc);
|
/* list */
|
||||||
guint32 gst_value_get_fourcc (const GValue *value);
|
|
||||||
|
|
||||||
void gst_value_set_int_range (GValue *value, int start, int end);
|
|
||||||
int gst_value_get_int_range_min (const GValue *value);
|
|
||||||
int gst_value_get_int_range_max (const GValue *value);
|
|
||||||
|
|
||||||
void gst_value_set_double_range (GValue *value, double start, double end);
|
|
||||||
double gst_value_get_double_range_min (const GValue *value);
|
|
||||||
double gst_value_get_double_range_max (const GValue *value);
|
|
||||||
|
|
||||||
G_CONST_RETURN GstCaps *gst_value_get_caps (const GValue *value);
|
|
||||||
void gst_value_set_caps (GValue *calue, const GstCaps *caps);
|
|
||||||
|
|
||||||
void gst_value_list_prepend_value (GValue *value, const GValue *prepend_value);
|
void gst_value_list_prepend_value (GValue *value, const GValue *prepend_value);
|
||||||
void gst_value_list_append_value (GValue *value, const GValue *append_value);
|
void gst_value_list_append_value (GValue *value, const GValue *append_value);
|
||||||
|
@ -83,12 +84,50 @@ guint gst_value_list_get_size (const GValue *value);
|
||||||
G_CONST_RETURN GValue *gst_value_list_get_value (const GValue *value, guint index);
|
G_CONST_RETURN GValue *gst_value_list_get_value (const GValue *value, guint index);
|
||||||
void gst_value_list_concat (GValue *dest, const GValue *value1, const GValue *value2);
|
void gst_value_list_concat (GValue *dest, const GValue *value1, const GValue *value2);
|
||||||
|
|
||||||
void _gst_value_initialize (void);
|
/* fourcc */
|
||||||
|
|
||||||
|
void gst_value_set_fourcc (GValue *value, guint32 fourcc);
|
||||||
|
guint32 gst_value_get_fourcc (const GValue *value);
|
||||||
|
|
||||||
|
/* int range */
|
||||||
|
|
||||||
|
void gst_value_set_int_range (GValue *value, int start, int end);
|
||||||
|
int gst_value_get_int_range_min (const GValue *value);
|
||||||
|
int gst_value_get_int_range_max (const GValue *value);
|
||||||
|
|
||||||
|
/* double range */
|
||||||
|
|
||||||
|
void gst_value_set_double_range (GValue *value, double start, double end);
|
||||||
|
double gst_value_get_double_range_min (const GValue *value);
|
||||||
|
double gst_value_get_double_range_max (const GValue *value);
|
||||||
|
|
||||||
|
/* caps */
|
||||||
|
|
||||||
|
G_CONST_RETURN GstCaps *gst_value_get_caps (const GValue *value);
|
||||||
|
void gst_value_set_caps (GValue *calue, const GstCaps *caps);
|
||||||
|
|
||||||
|
/* compare */
|
||||||
|
|
||||||
|
gboolean gst_value_can_compare (const GValue *value1, const GValue *value2);
|
||||||
|
int gst_value_compare (const GValue *value1, const GValue *value2);
|
||||||
|
|
||||||
|
/* union */
|
||||||
|
|
||||||
|
gboolean gst_value_can_union (const GValue *value1, const GValue *value2);
|
||||||
|
gboolean gst_value_union (GValue *dest, const GValue *value1, const GValue *value2);
|
||||||
|
void gst_value_register_union_func (GType type1, GType type2, GstValueUnionFunc func);
|
||||||
|
|
||||||
|
/* intersection */
|
||||||
|
|
||||||
|
gboolean gst_value_can_intersect (const GValue *value1, const GValue *value2);
|
||||||
|
gboolean gst_value_intersect (GValue *dest, const GValue *value1, const GValue *value2);
|
||||||
|
void gst_value_register_intersect_func (GType type1, GType type2, GstValueIntersectFunc func);
|
||||||
|
|
||||||
|
/* */
|
||||||
|
|
||||||
|
void gst_value_register (const GstValueTable *table);
|
||||||
void gst_value_init_and_copy (GValue *dest, const GValue *src);
|
void gst_value_init_and_copy (GValue *dest, const GValue *src);
|
||||||
int gst_value_compare (const GValue *src1, const GValue *src2);
|
void _gst_value_initialize (void);
|
||||||
gboolean gst_value_intersect (GValue *dest, const GValue *src1, const GValue *src2);
|
|
||||||
gboolean gst_value_union (GValue *dest, const GValue *src1, const GValue *src2);
|
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue