mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-06-08 09:09:26 +00:00
add double range intersection. Consistently use v_int
Original commit message from CVS: add double range intersection. Consistently use v_int
This commit is contained in:
parent
72534d09df
commit
6e2ad5c2b4
|
@ -257,20 +257,20 @@ gst_value_list_concat (GValue *dest, const GValue *value1, const GValue *value2)
|
|||
static void
|
||||
gst_value_init_fourcc (GValue *value)
|
||||
{
|
||||
value->data[0].v_long = 0;
|
||||
value->data[0].v_int = 0;
|
||||
}
|
||||
|
||||
static void
|
||||
gst_value_copy_fourcc (const GValue *src_value, GValue *dest_value)
|
||||
{
|
||||
dest_value->data[0].v_long = src_value->data[0].v_long;
|
||||
dest_value->data[0].v_int = src_value->data[0].v_int;
|
||||
}
|
||||
|
||||
static gchar *
|
||||
gst_value_collect_fourcc (GValue *value, guint n_collect_values,
|
||||
GTypeCValue *collect_values, guint collect_flags)
|
||||
{
|
||||
value->data[0].v_long = collect_values[0].v_long;
|
||||
value->data[0].v_int = collect_values[0].v_int;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
@ -285,7 +285,7 @@ gst_value_lcopy_fourcc (const GValue *value, guint n_collect_values,
|
|||
return g_strdup_printf ("value location for `%s' passed as NULL",
|
||||
G_VALUE_TYPE_NAME (value));
|
||||
|
||||
*fourcc_p = value->data[0].v_long;
|
||||
*fourcc_p = value->data[0].v_int;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
@ -295,7 +295,7 @@ gst_value_set_fourcc (GValue *value, guint32 fourcc)
|
|||
{
|
||||
g_return_if_fail (GST_VALUE_HOLDS_FOURCC (value));
|
||||
|
||||
value->data[0].v_long = fourcc;
|
||||
value->data[0].v_int = fourcc;
|
||||
}
|
||||
|
||||
guint32
|
||||
|
@ -303,7 +303,7 @@ gst_value_get_fourcc (const GValue *value)
|
|||
{
|
||||
g_return_val_if_fail (GST_VALUE_HOLDS_FOURCC (value), 0);
|
||||
|
||||
return value->data[0].v_long;
|
||||
return value->data[0].v_int;
|
||||
}
|
||||
|
||||
/* int range */
|
||||
|
@ -311,20 +311,23 @@ gst_value_get_fourcc (const GValue *value)
|
|||
static void
|
||||
gst_value_init_int_range (GValue *value)
|
||||
{
|
||||
value->data[0].v_long = 0;
|
||||
value->data[0].v_int = 0;
|
||||
value->data[1].v_int = 0;
|
||||
}
|
||||
|
||||
static void
|
||||
gst_value_copy_int_range (const GValue *src_value, GValue *dest_value)
|
||||
{
|
||||
dest_value->data[0].v_long = src_value->data[0].v_long;
|
||||
dest_value->data[0].v_int = src_value->data[0].v_int;
|
||||
dest_value->data[1].v_int = src_value->data[1].v_int;
|
||||
}
|
||||
|
||||
static gchar *
|
||||
gst_value_collect_int_range (GValue *value, guint n_collect_values,
|
||||
GTypeCValue *collect_values, guint collect_flags)
|
||||
{
|
||||
value->data[0].v_long = collect_values[0].v_long;
|
||||
/* FIXME */
|
||||
value->data[0].v_int = collect_values[0].v_int;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
@ -335,11 +338,12 @@ gst_value_lcopy_int_range (const GValue *value, guint n_collect_values,
|
|||
{
|
||||
guint32 *int_range_p = collect_values[0].v_pointer;
|
||||
|
||||
/* FIXME */
|
||||
if (!int_range_p)
|
||||
return g_strdup_printf ("value location for `%s' passed as NULL",
|
||||
G_VALUE_TYPE_NAME (value));
|
||||
|
||||
*int_range_p = value->data[0].v_long;
|
||||
*int_range_p = value->data[0].v_int;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
@ -349,8 +353,8 @@ gst_value_set_int_range (GValue *value, int start, int end)
|
|||
{
|
||||
g_return_if_fail (GST_VALUE_HOLDS_INT_RANGE (value));
|
||||
|
||||
value->data[0].v_long = start;
|
||||
value->data[1].v_long = end;
|
||||
value->data[0].v_int = start;
|
||||
value->data[1].v_int = end;
|
||||
}
|
||||
|
||||
int
|
||||
|
@ -358,7 +362,7 @@ gst_value_get_int_range_min (const GValue *value)
|
|||
{
|
||||
g_return_val_if_fail (GST_VALUE_HOLDS_INT_RANGE (value), 0);
|
||||
|
||||
return value->data[0].v_long;
|
||||
return value->data[0].v_int;
|
||||
}
|
||||
|
||||
int
|
||||
|
@ -366,7 +370,7 @@ gst_value_get_int_range_max (const GValue *value)
|
|||
{
|
||||
g_return_val_if_fail (GST_VALUE_HOLDS_INT_RANGE (value), 0);
|
||||
|
||||
return value->data[1].v_long;
|
||||
return value->data[1].v_int;
|
||||
}
|
||||
|
||||
/* double range */
|
||||
|
@ -462,7 +466,7 @@ static void
|
|||
gst_value_transform_fourcc_string (const GValue *src_value,
|
||||
GValue *dest_value)
|
||||
{
|
||||
guint32 fourcc = src_value->data[0].v_long;
|
||||
guint32 fourcc = src_value->data[0].v_int;
|
||||
|
||||
if (g_ascii_isprint ((fourcc>>0) & 0xff) &&
|
||||
g_ascii_isprint ((fourcc>>8) & 0xff) &&
|
||||
|
@ -480,7 +484,7 @@ 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_long, (int)src_value->data[1].v_long);
|
||||
(int)src_value->data[0].v_int, (int)src_value->data[1].v_int);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -715,8 +719,9 @@ gst_value_intersect_int_int_range (GValue *dest, const GValue *src1,
|
|||
g_return_val_if_fail(G_VALUE_TYPE(src1) == G_TYPE_INT, FALSE);
|
||||
g_return_val_if_fail(G_VALUE_TYPE(src2) == GST_TYPE_INT_RANGE, FALSE);
|
||||
|
||||
if (src2->data[0].v_long <= src1->data[0].v_int &&
|
||||
src2->data[1].v_long >= src1->data[0].v_int){
|
||||
if (src2->data[0].v_int <= src1->data[0].v_int &&
|
||||
src2->data[1].v_int >= src1->data[0].v_int){
|
||||
g_value_init(dest, G_TYPE_INT);
|
||||
g_value_copy(src1, dest);
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -734,8 +739,8 @@ gst_value_intersect_int_range_int_range (GValue *dest, const GValue *src1,
|
|||
g_return_val_if_fail(G_VALUE_TYPE(src1) == GST_TYPE_INT_RANGE, FALSE);
|
||||
g_return_val_if_fail(G_VALUE_TYPE(src2) == GST_TYPE_INT_RANGE, FALSE);
|
||||
|
||||
min = MAX(src1->data[0].v_long, src2->data[0].v_long);
|
||||
max = MIN(src1->data[1].v_long, src2->data[1].v_long);
|
||||
min = MAX(src1->data[0].v_int, src2->data[0].v_int);
|
||||
max = MIN(src1->data[1].v_int, src2->data[1].v_int);
|
||||
|
||||
if(min < max){
|
||||
g_value_init(dest, GST_TYPE_INT_RANGE);
|
||||
|
@ -751,6 +756,50 @@ gst_value_intersect_int_range_int_range (GValue *dest, const GValue *src1,
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_value_intersect_double_double_range (GValue *dest, const GValue *src1,
|
||||
const GValue *src2)
|
||||
{
|
||||
g_return_val_if_fail(G_VALUE_TYPE(src1) == G_TYPE_DOUBLE, FALSE);
|
||||
g_return_val_if_fail(G_VALUE_TYPE(src2) == GST_TYPE_DOUBLE_RANGE, FALSE);
|
||||
|
||||
if (src2->data[0].v_double <= src1->data[0].v_double &&
|
||||
src2->data[1].v_double >= src1->data[0].v_double){
|
||||
g_value_init(dest, G_TYPE_DOUBLE);
|
||||
g_value_copy(src1, dest);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_value_intersect_double_range_double_range (GValue *dest, const GValue *src1,
|
||||
const GValue *src2)
|
||||
{
|
||||
double min;
|
||||
double max;
|
||||
|
||||
g_return_val_if_fail(G_VALUE_TYPE(src1) == GST_TYPE_DOUBLE_RANGE, FALSE);
|
||||
g_return_val_if_fail(G_VALUE_TYPE(src2) == GST_TYPE_DOUBLE_RANGE, FALSE);
|
||||
|
||||
min = MAX(src1->data[0].v_double, src2->data[0].v_double);
|
||||
max = MIN(src1->data[1].v_double, src2->data[1].v_double);
|
||||
|
||||
if(min < max){
|
||||
g_value_init(dest, GST_TYPE_DOUBLE_RANGE);
|
||||
gst_value_set_double_range(dest, min, max);
|
||||
return TRUE;
|
||||
}
|
||||
if(min == max){
|
||||
g_value_init(dest, G_TYPE_DOUBLE);
|
||||
g_value_set_int(dest, min);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
gboolean
|
||||
gst_value_can_intersect (const GValue *value1, const GValue *value2)
|
||||
{
|
||||
|
@ -782,6 +831,11 @@ gst_value_intersect (GValue *dest, const GValue *value1, const GValue *value2)
|
|||
ret = intersect_info->func(dest, value1, value2);
|
||||
return ret;
|
||||
}
|
||||
if(intersect_info->type1 == G_VALUE_TYPE(value2) &&
|
||||
intersect_info->type2 == G_VALUE_TYPE(value1)) {
|
||||
ret = intersect_info->func(dest, value2, value1);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
if(gst_value_compare(value1, value2) == GST_VALUE_EQUAL){
|
||||
|
@ -914,6 +968,10 @@ _gst_value_initialize (void)
|
|||
gst_value_intersect_int_int_range);
|
||||
gst_value_register_intersect_func (GST_TYPE_INT_RANGE, GST_TYPE_INT_RANGE,
|
||||
gst_value_intersect_int_range_int_range);
|
||||
gst_value_register_intersect_func (G_TYPE_DOUBLE, GST_TYPE_DOUBLE_RANGE,
|
||||
gst_value_intersect_double_double_range);
|
||||
gst_value_register_intersect_func (GST_TYPE_DOUBLE_RANGE, GST_TYPE_DOUBLE_RANGE,
|
||||
gst_value_intersect_double_range_double_range);
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue