value: Remove set-style bitmask intersection/union/subtraction functions

Set operations on the bitmasks don't make much sense and result
in invalid caps when used as a channel-mask. They are now handled
exactly like integers.

This functionality was not used anywhere except for tests.

https://bugzilla.gnome.org/show_bug.cgi?id=691370
This commit is contained in:
Sebastian Dröge 2013-02-13 17:00:23 +01:00
parent e479d22040
commit fb3b53328f
2 changed files with 2 additions and 95 deletions

View file

@ -4756,11 +4756,8 @@ gst_value_register_subtract_func (GType minuend_type, GType subtrahend_type,
{
GstValueSubtractInfo info;
/* one type must be unfixed, other subtractions can be done as comparisons,
* special case: bitmasks */
if (minuend_type != GST_TYPE_BITMASK)
g_return_if_fail (!gst_type_is_fixed (minuend_type)
|| !gst_type_is_fixed (subtrahend_type));
g_return_if_fail (!gst_type_is_fixed (minuend_type)
|| !gst_type_is_fixed (subtrahend_type));
info.minuend = minuend_type;
info.subtrahend = subtrahend_type;
@ -5649,58 +5646,6 @@ gst_value_transform_bitmask_uint64 (const GValue * src_value,
dest_value->data[0].v_uint64 = src_value->data[0].v_uint64;
}
static gboolean
gst_value_intersect_bitmask_bitmask (GValue * dest, const GValue * src1,
const GValue * src2)
{
guint64 s1, s2;
s1 = gst_value_get_bitmask (src1);
s2 = gst_value_get_bitmask (src2);
if (dest) {
g_value_init (dest, GST_TYPE_BITMASK);
gst_value_set_bitmask (dest, s1 & s2);
}
return TRUE;
}
static gboolean
gst_value_union_bitmask_bitmask (GValue * dest, const GValue * src1,
const GValue * src2)
{
guint64 s1, s2;
s1 = gst_value_get_bitmask (src1);
s2 = gst_value_get_bitmask (src2);
g_value_init (dest, GST_TYPE_BITMASK);
gst_value_set_bitmask (dest, s1 | s2);
return TRUE;
}
static gboolean
gst_value_subtract_bitmask_bitmask (GValue * dest,
const GValue * minuend, const GValue * subtrahend)
{
guint64 m, s, r;
g_return_val_if_fail (GST_VALUE_HOLDS_BITMASK (minuend), FALSE);
g_return_val_if_fail (GST_VALUE_HOLDS_BITMASK (subtrahend), FALSE);
m = minuend->data[0].v_uint64;
s = subtrahend->data[0].v_uint64;
r = m & (~s);
if (dest) {
g_value_init (dest, GST_TYPE_BITMASK);
gst_value_set_bitmask (dest, r);
}
return (r != 0);
}
static gint
gst_value_compare_bitmask (const GValue * value1, const GValue * value2)
{
@ -6181,8 +6126,6 @@ _priv_gst_value_initialize (void)
gst_value_register_intersect_func (GST_TYPE_FRACTION_RANGE,
GST_TYPE_FRACTION_RANGE,
gst_value_intersect_fraction_range_fraction_range);
gst_value_register_intersect_func (GST_TYPE_BITMASK,
GST_TYPE_BITMASK, gst_value_intersect_bitmask_bitmask);
gst_value_register_subtract_func (G_TYPE_INT, GST_TYPE_INT_RANGE,
gst_value_subtract_int_int_range);
@ -6209,8 +6152,6 @@ _priv_gst_value_initialize (void)
gst_value_register_subtract_func (GST_TYPE_FRACTION_RANGE,
GST_TYPE_FRACTION_RANGE,
gst_value_subtract_fraction_range_fraction_range);
gst_value_register_subtract_func (GST_TYPE_BITMASK,
GST_TYPE_BITMASK, gst_value_subtract_bitmask_bitmask);
/* see bug #317246, #64994, #65041 */
{
@ -6223,8 +6164,6 @@ _priv_gst_value_initialize (void)
gst_value_union_int_int_range);
gst_value_register_union_func (GST_TYPE_INT_RANGE, GST_TYPE_INT_RANGE,
gst_value_union_int_range_int_range);
gst_value_register_union_func (GST_TYPE_BITMASK,
GST_TYPE_BITMASK, gst_value_union_bitmask_bitmask);
#if 0
/* Implement these if needed */

View file

@ -810,16 +810,6 @@ GST_START_TEST (test_value_intersect)
g_value_unset (&src1);
g_value_unset (&src2);
g_value_unset (&dest);
g_value_init (&src1, GST_TYPE_BITMASK);
gst_value_set_bitmask (&src1, 0xf00f);
g_value_init (&src2, GST_TYPE_BITMASK);
gst_value_set_bitmask (&src2, 0xff00);
ret = gst_value_intersect (&dest, &src1, &src2);
fail_unless (ret == TRUE);
fail_unless_equals_uint64 (0xf000, gst_value_get_bitmask (&dest));
g_value_unset (&src1);
g_value_unset (&src2);
}
GST_END_TEST;
@ -1919,27 +1909,6 @@ GST_START_TEST (test_value_subtract_fraction_list)
GST_END_TEST;
GST_START_TEST (test_value_subtract_bitmask)
{
GValue result = { 0 };
GValue src1 = { 0 };
GValue src2 = { 0 };
/* Subtract 1/4 from 1/2 */
g_value_init (&src1, GST_TYPE_BITMASK);
g_value_init (&src2, GST_TYPE_BITMASK);
gst_value_set_bitmask (&src1, 0xffff);
gst_value_set_bitmask (&src2, 0xff00);
fail_unless (gst_value_subtract (&result, &src1, &src2) == TRUE);
fail_unless_equals_uint64 (0x00ff, gst_value_get_bitmask (&result));
g_value_unset (&src1);
g_value_unset (&src2);
g_value_unset (&result);
}
GST_END_TEST;
GST_START_TEST (test_date)
{
GstStructure *s;
@ -2868,7 +2837,6 @@ gst_value_suite (void)
tcase_add_test (tc_chain, test_value_subtract_fraction);
tcase_add_test (tc_chain, test_value_subtract_fraction_range);
tcase_add_test (tc_chain, test_value_subtract_fraction_list);
tcase_add_test (tc_chain, test_value_subtract_bitmask);
tcase_add_test (tc_chain, test_date);
tcase_add_test (tc_chain, test_date_time);
tcase_add_test (tc_chain, test_fraction_range);