commit 28d8566a185a820f115f7c75ac5346b972eb28b8 Author: Sjoerd Simons Date: Sat Mar 29 16:49:52 2008 +0100 * src/rbgst-object.c, src/rbgst.h: Add rbgst_object_instance2robj as a small wrapper around rbgobj_get_value_from_gobject which always sinks the GstObject and use it as a converstion function for GST_TYPE_OBJECT. Also no longer expose sink and float? methods on Gst::Object * src/rbgst-element.c: Use rbgst_object_instance2robj for the final conversion * test/test_object.rb: No longer test Gst::Object sink and float? methods Based on a patch ktou send on the mailing list diff --git a/gstreamer/src/rbgst-element.c b/gstreamer/src/rbgst-element.c index 2be3d3f..84375f7 100644 --- a/gstreamer/src/rbgst-element.c +++ b/gstreamer/src/rbgst-element.c @@ -22,7 +22,6 @@ #include "rbgst.h" #include "rbgst-private.h" -#include "rbgprivate.h" #define SELF(self) RVAL2GST_ELEMENT(self) @@ -45,7 +44,7 @@ instance2robj(gpointer instance) type = G_TYPE_FROM_INSTANCE(instance); klass = GTYPE2CLASS(type); define_class_if_need(klass, type); - return rbgobj_get_value_from_gobject(instance, TRUE); + return rbgst_object_instance2robj(instance); } diff --git a/gstreamer/src/rbgst-object.c b/gstreamer/src/rbgst-object.c index eead68b..46cff33 100644 --- a/gstreamer/src/rbgst-object.c +++ b/gstreamer/src/rbgst-object.c @@ -21,24 +21,25 @@ */ #include "rbgst.h" +#include "rbgprivate.h" #define SELF(self) (RVAL2GST_OBJ(self)) +static RGConvertTable table = {0}; + /* Class: Gst::Object * Basis for the GST object hierarchy. */ -/* - * Method: floating? - * - * Checks if the Gst::Object::FLAG_FLOATING flag is set on the object. - * - * Returns: true if the flag is set, false otherwise. - */ -static VALUE -object_is_floating(VALUE self) +VALUE +rbgst_object_instance2robj(gpointer instance) { - return CBOOL2RVAL(GST_OBJECT_IS_FLOATING(SELF(self))); + if (GST_OBJECT_IS_FLOATING(instance)) { + gst_object_ref(instance); + gst_object_sink(instance); + } + + return rbgobj_get_value_from_gobject(instance, TRUE); } static VALUE @@ -47,23 +48,19 @@ object_set_name(VALUE self, VALUE name) return CBOOL2RVAL(gst_object_set_name(SELF(self), RVAL2CSTR(name))); } -static VALUE -object_sink(VALUE self) -{ - gst_object_sink(SELF(self)); - return Qnil; -} - void Init_gst_object(void) { VALUE cGstObject; + table.type = GST_TYPE_OBJECT; + table.instance2robj = rbgst_object_instance2robj; + + RG_DEF_CONVERSION(&table); + cGstObject = G_DEF_CLASS(GST_TYPE_OBJECT, "Object", mGst); - rb_define_method(cGstObject, "floating?", object_is_floating,0); rb_define_method(cGstObject, "set_name", object_set_name, 1); - rb_define_method(cGstObject, "sink", object_sink, 0); G_DEF_SETTERS(cGstObject); diff --git a/gstreamer/src/rbgst.h b/gstreamer/src/rbgst.h index 0be38e0..ca77b35 100644 --- a/gstreamer/src/rbgst.h +++ b/gstreamer/src/rbgst.h @@ -180,6 +180,9 @@ VALUE rbgst_structure_to_hash(GstStructure *structure); GstStructure *rbgst_hash_to_structure(VALUE hash); GstStructure *rbgst_hash_to_structure_with_name(VALUE hash, const char *name); +/* implemented in rbgst-object.c */ +VALUE rbgst_object_instance2robj(gpointer instance); + #define GST_TAG_LIST_STRUCTURE_NAME "taglist" diff --git a/gstreamer/test/test_object.rb b/gstreamer/test/test_object.rb index 75b4209..1c7b040 100644 --- a/gstreamer/test/test_object.rb +++ b/gstreamer/test/test_object.rb @@ -1,13 +1,6 @@ class TestObject < Test::Unit::TestCase include GstTestUtils - def test_floating - sink = create_element("fakesink") - assert(sink.floating?) - sink.sink - assert(!sink.floating?) - end - def test_name sink = create_element("fakesink", "my-fakesink") assert_equal("my-fakesink", sink.name)