gnomemm r2121 - in gstreamermm/trunk: . gstreamer/gstreamermm gstreamer/gstreamermm/private gstreamer/src tools/m4



Author: jaalburqu
Date: Mon Mar 23 23:50:48 2009
New Revision: 2121
URL: http://svn.gnome.org/viewvc/gnomemm?rev=2121&view=rev

Log:
2009-03-23  Josà Alburquerque  <jaalburqu svn gnome org>

	* gstreamer/gstreamermm/Makefile.am:
	* gstreamer/gstreamermm/private/Makefile.am:
	* gstreamer/src/Makefile_list_of_hg.am_fragment:
	* gstreamer/src/gst_vfuncs.defs:
	* gstreamer/src/object.ccg:
	* gstreamer/src/object.hg: Wrapped Gst::Object's methods, signals and
	vfuncs with gmmproc.
	* gstreamer/src/xml.hg: Used xmlNodePtr instead of xmlNode* in
	object_loaded() signal parameter.
	* gstreamer/src/gst_signals.defs.patch:
	* gstreamer/src/gst_signals.defs: Corrected signal defs patch and
	regenerated the signal defs.
	* tools/m4/convert_gst.m4: Added Gst::Object conversion.

	* gstreamer/gstreamermm/object.cc:
	* gstreamer/gstreamermm/object.h:
	* gstreamer/gstreamermm/private/object_p.h: Removed these because
	gmmproc now generates them.

	* gstreamer/src/bin.ccg: Modified remove() to throw exceptions if
	element is null or removal failed (like add() does).

	* gstreamer/src/element.hg: Typo.

Added:
   gstreamermm/trunk/gstreamer/src/object.ccg
   gstreamermm/trunk/gstreamer/src/object.hg
Removed:
   gstreamermm/trunk/gstreamer/gstreamermm/object.cc
   gstreamermm/trunk/gstreamer/gstreamermm/object.h
   gstreamermm/trunk/gstreamer/gstreamermm/private/object_p.h
Modified:
   gstreamermm/trunk/ChangeLog
   gstreamermm/trunk/gstreamer/gstreamermm/Makefile.am
   gstreamermm/trunk/gstreamer/gstreamermm/private/Makefile.am
   gstreamermm/trunk/gstreamer/src/Makefile_list_of_hg.am_fragment
   gstreamermm/trunk/gstreamer/src/bin.ccg
   gstreamermm/trunk/gstreamer/src/element.hg
   gstreamermm/trunk/gstreamer/src/gst_signals.defs
   gstreamermm/trunk/gstreamer/src/gst_signals.defs.patch
   gstreamermm/trunk/gstreamer/src/xml.hg
   gstreamermm/trunk/tools/m4/convert_gst.m4

Modified: gstreamermm/trunk/gstreamer/gstreamermm/Makefile.am
==============================================================================
--- gstreamermm/trunk/gstreamer/gstreamermm/Makefile.am	(original)
+++ gstreamermm/trunk/gstreamer/gstreamermm/Makefile.am	Mon Mar 23 23:50:48 2009
@@ -13,12 +13,12 @@
 
 sublib_files_extra_posix_cc = 
 sublib_files_extra_win32_cc =
-sublib_files_extra_general_cc = init.cc miniobject.cc object.cc version.cc wrap.cc
+sublib_files_extra_general_cc = init.cc miniobject.cc version.cc wrap.cc
 sublib_files_extra_general_deprecated_cc = 
 
 sublib_files_extra_posix_h = 
 sublib_files_extra_win32_h =
-sublib_files_extra_general_h = init.h miniobject.h object.h version.h wrap.h
+sublib_files_extra_general_h = init.h miniobject.h version.h wrap.h
 sublib_files_extra_general_deprecated_h = 
 
 include $(top_srcdir)/build_shared/Makefile_build.am_fragment

Modified: gstreamermm/trunk/gstreamer/gstreamermm/private/Makefile.am
==============================================================================
--- gstreamermm/trunk/gstreamer/gstreamermm/private/Makefile.am	(original)
+++ gstreamermm/trunk/gstreamer/gstreamermm/private/Makefile.am	Mon Mar 23 23:50:48 2009
@@ -7,8 +7,8 @@
 files_built_all_p_h	= $(files_all_hg:.hg=_p.h)
 files_all_plugin_p_h = $(files_all_plugin_hg:.hg=_p.h)
 files_existing_plugin_p_h = $(files_existing_plugin_hg:.hg=_p.h)
-files_extra_p_h		= object_p.h miniobject_p.h taglist_p.h
-files_extra_all_p_h	= object_p.h miniobject_p.h taglist_p.h
+files_extra_p_h		= miniobject_p.h taglist_p.h
+files_extra_all_p_h	= miniobject_p.h taglist_p.h
 
 dist_sources = $(files_built_all_p_h) $(files_extra_all_p_h) \
 	       $(files_all_plugin_p_h)

Modified: gstreamermm/trunk/gstreamer/src/Makefile_list_of_hg.am_fragment
==============================================================================
--- gstreamermm/trunk/gstreamer/src/Makefile_list_of_hg.am_fragment	(original)
+++ gstreamermm/trunk/gstreamer/src/Makefile_list_of_hg.am_fragment	Mon Mar 23 23:50:48 2009
@@ -7,10 +7,10 @@
 files_general_hg = bin.hg buffer.hg bus.hg caps.hg childproxy.hg clock.hg \
 	element.hg elementfactory.hg enums.hg error.hg event.hg filter.hg \
 	format.hg index.hg ghostpad.hg indexfactory.hg interface.hg \
-	iterator.hg message.hg pad.hg padtemplate.hg parse.hg pipeline.hg \
-	plugin.hg pluginfeature.hg preset.hg query.hg registry.hg segment.hg \
-	structure.hg systemclock.hg taglist.hg tagsetter.hg task.hg \
-	urihandler.hg value.hg xml.hg \
+	iterator.hg message.hg object.hg pad.hg padtemplate.hg parse.hg \
+	pipeline.hg plugin.hg pluginfeature.hg preset.hg query.hg \
+	registry.hg segment.hg structure.hg systemclock.hg taglist.hg \
+	tagsetter.hg task.hg urihandler.hg value.hg xml.hg \
 	basesrc.hg basesink.hg basetransform.hg pushsrc.hg audioclock.hg \
 	audiofilter.hg audiosink.hg audiosrc.hg baseaudiosink.hg \
 	baseaudiosrc.hg cddabasesrc.hg videosink.hg \

Modified: gstreamermm/trunk/gstreamer/src/bin.ccg
==============================================================================
--- gstreamermm/trunk/gstreamer/src/bin.ccg	(original)
+++ gstreamermm/trunk/gstreamer/src/bin.ccg	Mon Mar 23 23:50:48 2009
@@ -63,7 +63,8 @@
 
 Glib::RefPtr<Gst::Bin> Bin::remove(const Glib::RefPtr<Gst::Element>& element)
 {
-  //TODO: Throw an exception if element is null?
+  if(!element)
+    throw std::runtime_error("Failed to remove null element.");
 
   const bool result = gst_bin_remove(gobj(), Glib::unwrap(element));
 
@@ -72,7 +73,7 @@
   if(result)
     return Glib::wrap(gobj(), true);
   else
-    return Glib::RefPtr<Gst::Bin>(0);
+    throw std::runtime_error("Failed to remove " + element->get_name() + " element.");
 }
 
 } //namespace Gst

Modified: gstreamermm/trunk/gstreamer/src/element.hg
==============================================================================
--- gstreamermm/trunk/gstreamer/src/element.hg	(original)
+++ gstreamermm/trunk/gstreamer/src/element.hg	Mon Mar 23 23:50:48 2009
@@ -282,11 +282,11 @@
 
 #m4 _CONVERSION(`GstPad*',`const Glib::RefPtr<Gst::Pad>&',`Glib::wrap($3, true)')
 
-  /** signals that a new Gst::Pad has been added to the element.
+  /** Signals that a new Gst::Pad has been added to the element.
    */
   _WRAP_SIGNAL(void pad_added(const Glib::RefPtr<Gst::Pad>& new_pad), "pad-added")
 
-  /** signals that a Gst::Pad has been removed from the element
+  /** Signals that a Gst::Pad has been removed from the element.
    */
   _WRAP_SIGNAL(void pad_removed(const Glib::RefPtr<Gst::Pad>& old_pad), "pad-removed")
 

Modified: gstreamermm/trunk/gstreamer/src/gst_signals.defs
==============================================================================
--- gstreamermm/trunk/gstreamer/src/gst_signals.defs	(original)
+++ gstreamermm/trunk/gstreamer/src/gst_signals.defs	Mon Mar 23 23:50:48 2009
@@ -305,7 +305,7 @@
   (return-type "void")
   (when "last")
   (parameters
-    '("gpointer" "p0")
+    '("GstXmlNodePtr" "p0")
   )
 )
 
@@ -653,7 +653,7 @@
   (when "last")
   (parameters
     '("GstObject*" "p0")
-    '("xmlNode*" "p1")
+    '("xmlNodePtr" "p1")
   )
 )
 

Modified: gstreamermm/trunk/gstreamer/src/gst_signals.defs.patch
==============================================================================
--- gstreamermm/trunk/gstreamer/src/gst_signals.defs.patch	(original)
+++ gstreamermm/trunk/gstreamer/src/gst_signals.defs.patch	Mon Mar 23 23:50:48 2009
@@ -1,5 +1,5 @@
---- gst_signals.defs	2009-01-05 00:03:56.000000000 -0500
-+++ gst_signals.defs.new	2009-01-05 00:06:31.000000000 -0500
+--- gst_signals.defs	2009-03-23 16:36:31.000000000 -0400
++++ gst_signals.defs.new	2009-03-23 16:40:30.000000000 -0400
 @@ -1,3 +1,5 @@
 +;; Apply gst_signals.defs.patch after regenerating.
 +
@@ -42,6 +42,15 @@
    )
  )
  
+@@ -303,7 +305,7 @@
+   (return-type "void")
+   (when "last")
+   (parameters
+-    '("gpointer" "p0")
++    '("GstXmlNodePtr" "p0")
+   )
+ )
+ 
 @@ -357,7 +359,7 @@
    (return-type "gboolean")
    (when "last")
@@ -69,16 +78,16 @@
    )
  )
  
-@@ -642,7 +644,7 @@
+@@ -651,7 +653,7 @@
    (when "last")
    (parameters
      '("GstObject*" "p0")
 -    '("gpointer" "p1")
-+    '("xmlNode*" "p1")
++    '("xmlNodePtr" "p1")
    )
  )
  
-@@ -951,7 +953,7 @@
+@@ -1190,7 +1192,7 @@
    (return-type "void")
    (when "last")
    (parameters
@@ -87,7 +96,7 @@
      '("GstPad*" "p1")
    )
  )
-@@ -1161,7 +1163,7 @@
+@@ -1400,7 +1402,7 @@
    (return-type "void")
    (when "last")
    (parameters
@@ -96,7 +105,7 @@
      '("GstPad*" "p1")
    )
  )
-@@ -1171,7 +1173,7 @@
+@@ -1410,7 +1412,7 @@
    (return-type "void")
    (when "last")
    (parameters
@@ -105,7 +114,7 @@
      '("GstPad*" "p1")
    )
  )
-@@ -1731,7 +1733,7 @@
+@@ -1970,7 +1972,7 @@
    (return-type "void")
    (when "last")
    (parameters
@@ -114,7 +123,7 @@
    )
  )
  
-@@ -5165,7 +5167,7 @@
+@@ -6043,7 +6045,7 @@
  
  (define-signal convert-frame
    (of-object "GstPlayBin2")

Added: gstreamermm/trunk/gstreamer/src/object.ccg
==============================================================================
--- (empty file)
+++ gstreamermm/trunk/gstreamer/src/object.ccg	Mon Mar 23 23:50:48 2009
@@ -0,0 +1,65 @@
+/* gstreamermm - a C++ wrapper for gstreamer
+ *
+ * Copyright 2008 The gstreamermm Development Team
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <gst/gstenumtypes.h>
+_PINCLUDE(glibmm/private/object_p.h)
+
+namespace Gst
+{
+
+Object::Object(const Glib::ConstructParams& construct_params)
+:
+  Glib::Object(construct_params)
+{
+  // Get rid of the floating reference for newly constructed Gst::Objects.
+  gst_object_ref(gobj());
+  gst_object_sink(gobj());
+}
+
+Object::Object(GstObject* castitem)
+:
+  Glib::Object((GObject*)(castitem))
+{
+  if(G_LIKELY(GST_OBJECT_IS_FLOATING(castitem)))
+  {
+    //The floating reference is convenience for C,
+    //but is useless and difficult for us:
+    gst_object_ref(gobj());
+    gst_object_sink(gobj());
+  }
+}
+
+xmlpp::Node* Object::save(xmlpp::Node* parent)
+{
+  gst_object_save_thyself(gobj(), parent->cobj());
+
+  // gst_object_save_thyself() returns parent node so do so here also.
+  return parent;
+}
+
+const xmlpp::Node* Object::save(const xmlpp::Node* parent) const
+{
+  gst_object_save_thyself(const_cast<GstObject*>(gobj()),
+    const_cast<xmlNodePtr>(parent->cobj()));
+
+  // gst_object_save_thyself() returns parent node so do so here also.
+  return parent;
+}
+
+} // namespace Gst

Added: gstreamermm/trunk/gstreamer/src/object.hg
==============================================================================
--- (empty file)
+++ gstreamermm/trunk/gstreamer/src/object.hg	Mon Mar 23 23:50:48 2009
@@ -0,0 +1,125 @@
+/* gstreamermm - a C++ wrapper for gstreamer
+ *
+ * Copyright 2008 The gstreamermm Development Team
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <gst/gstobject.h>
+#include <glibmm/object.h>
+#include <libxml++/nodes/node.h>
+
+_DEFS(gstreamermm,gst)
+
+namespace Gst
+{
+
+_WRAP_ENUM(ObjectFlags, GstObjectFlags)
+
+/** @defgroup GstBaseClasses gstreamermm Base Classes
+ *  Wrapped GStreamer base classes (plug-ins and other classes derrive from
+ *  these).
+ */
+
+/** Gst::Object - Base class for the GStreamer object hierarchy.
+ * Gst::Object provides a root for the object hierarchy tree filed in by the
+ * GStreamer library. It is currently a thin wrapper on top of Glib::Object.
+ * It is an abstract class that is not very usable on its own.
+ *
+ * Gst::Object gives us basic refcounting, parenting functionality and
+ * locking. Most of the function are just extended for special GStreamer needs
+ * and can be found under the same name in the base class of Gst::Object which
+ * is Glib::Object (e.g. Glib::Object::reference() becomes
+ * Gst:Object::reference().
+ *
+ * In contrast to Glib::Object instances, Gst::Object adds a name property.
+ * The functions set_name() and get_name() are used to set/get the name of the
+ * object.
+ *
+ * Last reviewed on 2005-11-09 (0.9.4)
+ * @ingroup GstBaseClasses
+ */
+class Object : public Glib::Object 
+{
+  _CLASS_GOBJECT(Object, GstObject, GST_OBJECT, Glib::Object, GObject)
+  _IGNORE(gst_object_ref, gst_object_unref, gst_object_sink,
+          gst_class_signal_connect, gst_class_signal_emit_by_name)
+  _CUSTOM_CTOR_CAST
+
+public:
+  /** Returns the entire set of flags for the object.
+   */
+  _MEMBER_GET(flags, flags, guint32, guint32)
+
+  //TODO: _MEMBER_GET(lock, lock, Glib::Mutex, GMutex)
+
+  _WRAP_METHOD(bool set_name(const Glib::ustring& name), gst_object_set_name)
+  _WRAP_METHOD(Glib::ustring get_name() const, gst_object_get_name)
+  _WRAP_METHOD(bool set_parent(const Glib::RefPtr<Gst::Object>& parent), gst_object_set_parent)
+  _WRAP_METHOD(Glib::RefPtr<Gst::Object> get_parent(), gst_object_get_parent)
+  _WRAP_METHOD(Glib::RefPtr<const Gst::Object> get_parent() const, gst_object_get_parent, constversion)
+  _WRAP_METHOD(void unparent(), gst_object_unparent)
+  _WRAP_METHOD(Glib::ustring get_name_prefix() const, gst_object_get_name_prefix)
+  _WRAP_METHOD(void set_name_prefix(const Glib::ustring& name_prefix), gst_object_set_name_prefix)
+
+  // Ignore default signal and error callback.
+  _IGNORE(gst_object_default_deep_notify, gst_object_default_error)
+
+#m4 _CONVERSION(`const Glib::ListHandle<const Gst::Object>&', `GList*', `($3).data()')
+  _WRAP_METHOD(static bool check_uniqueness(const Glib::ListHandle<const Gst::Object>& list, const Glib::ustring& name), gst_object_check_uniqueness)
+
+  _WRAP_METHOD(bool has_ancestor(const Glib::RefPtr<const Gst::Object>& ancestor) const, gst_object_has_ancestor)
+
+  /** Saves object into the parent XML node.
+   * @param parent The parent XML node to save object into.
+   * @return The new xmlpp::Node pointer with the saved object.
+   */
+  xmlpp::Node* save(xmlpp::Node* parent);
+  _IGNORE(gst_object_save_thyself)
+
+  /** Saves object into the parent XML node.
+   * @param parent The parent XML node to save object into.
+   * @return The new xmlpp::Node pointer with the saved object.
+   */
+  const xmlpp::Node* save(const xmlpp::Node* parent) const;
+
+  _WRAP_METHOD(void restore(xmlpp::Node* self), gst_object_restore_thyself)
+  _WRAP_METHOD(Glib::ustring get_path_string(), gst_object_get_path_string)
+
+  //TODO: Is this useful? (Note that the .def needs to be fixed by hand): _WRAP_SIGNAL(void deep_notify(Glib::RefPtr<Object> prop_object, GParamSpec* prop), "deep-notify")
+
+  /** Trigered whenever a new object is saved to XML. You can connect to this
+   * signal to insert custom XML tags into the core XML.
+   */
+  //TODO: Use xmlpp::Node for parameter?
+  _WRAP_SIGNAL(void object_saved(GstXmlNodePtr xml_node), "object-saved")  
+
+#m4 _CONVERSION(`GstObject*', `const Glib::RefPtr<Object>&', `Glib::wrap($3, true)')
+#m4 _CONVERSION(`const Glib::RefPtr<Object>&', `GstObject*', `($3)->gobj()')
+
+  /** Emitted when the parent of an object is set.
+   */
+  _WRAP_SIGNAL(void parent_set(const Glib::RefPtr<Object>& parent), "parent-set")
+
+  /** Emitted when the parent of an object is unset.
+   */
+  _WRAP_SIGNAL(void parent_unset(const Glib::RefPtr<Object>& parent), "parent-unset")
+
+  //TODO: Use xmlpp::Node as return and params in vfuncs below?
+  _WRAP_VFUNC(GstXmlNodePtr save(GstXmlNodePtr parent), "save_thyself")
+  _WRAP_VFUNC(void restore(GstXmlNodePtr self_node), "restore_thyself")
+};
+
+} // namespace Gst

Modified: gstreamermm/trunk/gstreamer/src/xml.hg
==============================================================================
--- gstreamermm/trunk/gstreamer/src/xml.hg	(original)
+++ gstreamermm/trunk/gstreamer/src/xml.hg	Mon Mar 23 23:50:48 2009
@@ -91,8 +91,8 @@
 #m4 _CONVERSION(`GstObject*',`const Glib::RefPtr<Gst::Object>&',`Glib::wrap($3, true)')
   /** Signals that a new object has been deserialized.
    */
-  //TODO: use xmlpp::Node* for signal:
-  _WRAP_SIGNAL(void object_loaded(const Glib::RefPtr<Gst::Object>& object, xmlNode* xml_node), "object-loaded")
+  //TODO: use xmlpp::Node for second parameter?
+  _WRAP_SIGNAL(void object_loaded(const Glib::RefPtr<Gst::Object>& object, xmlNodePtr xml_node), "object-loaded")
 };
 
 } //namespace Gst

Modified: gstreamermm/trunk/tools/m4/convert_gst.m4
==============================================================================
--- gstreamermm/trunk/tools/m4/convert_gst.m4	(original)
+++ gstreamermm/trunk/tools/m4/convert_gst.m4	Mon Mar 23 23:50:48 2009
@@ -37,6 +37,7 @@
 _CONVERSION(`GstObject*',`Glib::RefPtr<const Gst::Object>',`Glib::wrap($3)')
 _CONVERSION(`const Glib::RefPtr<Gst::Object>&',`GstObject*',`Glib::unwrap($3)')
 _CONVERSION(`Glib::RefPtr<Gst::Object>',`GstObject*',`Glib::unwrap($3)')
+_CONVERSION(`const Glib::RefPtr<const Gst::Object>&',`GstObject*',`const_cast<GstObject*>(($3)->gobj())')
 
 #Buffer
 _CONVERSION(`GstBuffer*',`Glib::RefPtr<Gst::Buffer>',`Gst::wrap($3)')
@@ -210,4 +211,5 @@
 
 #libxml++ Conversions
 _CONVERSION(`xmlpp::Node*',`xmlNodePtr',`($3)->cobj()')
+_CONVERSION(`xmlpp::Node*',`GstXmlNodePtr',`($3)->cobj()')
 _CONVERSION(`xmlpp::Document*',`xmlDocPtr',`($3)->cobj()')



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]