[gstreamermm] Wrapped some functions from GstPad: * gst_pad_set_activate_function * gst_pad_set_activatemode_fun



commit b5febd3db5f0519d6e07021f250ea688a58259fe
Author: Marcin Kolny <marcin kolny flytronic pl>
Date:   Tue May 27 14:07:39 2014 +0200

    Wrapped some functions from GstPad:
     * gst_pad_set_activate_function
     * gst_pad_set_activatemode_function
     * gst_pad_set_getrange_function

 gstreamer/src/pad.ccg |   83 +++++++++++++++++++++++++++++++++++++++++++++++++
 gstreamer/src/pad.hg  |   15 +++++++++
 2 files changed, 98 insertions(+), 0 deletions(-)
---
diff --git a/gstreamer/src/pad.ccg b/gstreamer/src/pad.ccg
index cf16eac..f2b4d2a 100644
--- a/gstreamer/src/pad.ccg
+++ b/gstreamer/src/pad.ccg
@@ -246,6 +246,71 @@ gboolean Pad_Event_gstreamermm_callback(GstPad* pad, GstObject* parent, GstEvent
   return false;
 }
 
+gboolean Pad_Activate_gstreamermm_callback(GstPad* pad, GstObject* parent)
+{
+  Gst::Pad *pad_wrapper = dynamic_cast<Gst::Pad*>
+    (static_cast<Glib::ObjectBase*>(
+      Glib::ObjectBase::_get_current_wrapper((GObject*)pad)
+      )
+    );
+  g_assert(pad);
+
+  try
+  {
+    return pad_wrapper->slot_activate(Glib::wrap(pad, true));
+  }
+  catch(...)
+  {
+    Glib::exception_handlers_invoke();
+  }
+
+  return false;
+}
+
+gboolean Pad_Activatemode_gstreamermm_callback(GstPad* pad, GstObject* parent, GstPadMode mode, gboolean 
active)
+{
+  Gst::Pad *pad_wrapper = dynamic_cast<Gst::Pad*>
+    (static_cast<Glib::ObjectBase*>(
+      Glib::ObjectBase::_get_current_wrapper((GObject*)pad)
+      )
+    );
+  g_assert(pad);
+
+  try
+  {
+    return pad_wrapper->slot_activatemode(Glib::wrap(pad, true), static_cast<PadMode>(mode), active);
+  }
+  catch(...)
+  {
+    Glib::exception_handlers_invoke();
+  }
+
+  return false;
+}
+
+GstFlowReturn Pad_Getrange_gstreamermm_callback(GstPad* pad, GstObject* parent, guint64 offset, guint 
length, GstBuffer **buffer)
+{
+  Gst::Pad *pad_wrapper = dynamic_cast<Gst::Pad*>
+    (static_cast<Glib::ObjectBase*>(
+      Glib::ObjectBase::_get_current_wrapper((GObject*)pad)
+      )
+    );
+  g_assert(pad);
+  Glib::RefPtr<Buffer> buf = Glib::wrap(*buffer, false);
+  try
+  {
+    return static_cast<GstFlowReturn>(
+               pad_wrapper->slot_getrange(Glib::wrap(pad, true), offset, length, buf)
+               );
+  }
+  catch(...)
+  {
+    Glib::exception_handlers_invoke();
+  }
+
+  return GST_FLOW_ERROR;
+}
+
 void Pad::set_chain_function(const SlotChain& slot)
 {
   slot_chain = slot;
@@ -264,6 +329,24 @@ void Pad::set_event_function(const SlotEvent& slot)
        gst_pad_set_event_function(GST_PAD(gobj()), &Pad_Event_gstreamermm_callback);
 }
 
+void Pad::set_activate_function(const SlotActivate& slot)
+{
+  slot_activate = slot;
+  gst_pad_set_activate_function(GST_PAD(gobj()), &Pad_Activate_gstreamermm_callback);
+}
+
+void Pad::set_activatemode_function(const SlotActivatemode& slot)
+{
+  slot_activatemode= slot;
+  gst_pad_set_activatemode_function(GST_PAD(gobj()), &Pad_Activatemode_gstreamermm_callback);
+}
+
+void Pad::set_getrange_function(const SlotGetrange& slot)
+{
+  slot_getrange = slot;
+  gst_pad_set_getrange_function(GST_PAD(gobj()), &Pad_Getrange_gstreamermm_callback);
+}
+
 bool Pad::is_ghost_pad() const
 {
        return GST_IS_GHOST_PAD(gobj());
diff --git a/gstreamer/src/pad.hg b/gstreamer/src/pad.hg
index ca56ee7..64adba6 100644
--- a/gstreamer/src/pad.hg
+++ b/gstreamer/src/pad.hg
@@ -123,6 +123,12 @@ public:
 
   typedef sigc::slot< gboolean, const Glib::RefPtr<Gst::Pad>&, /*transfer none*/ const 
Glib::RefPtr<Gst::Query>& > SlotQuery;
 
+  typedef sigc::slot< bool, const Glib::RefPtr<Gst::Pad>& > SlotActivate;
+
+  typedef sigc::slot< bool, const Glib::RefPtr<Gst::Pad>&, Gst::PadMode, bool > SlotActivatemode;
+
+  typedef sigc::slot< Gst::FlowReturn, const Glib::RefPtr<Gst::Pad>&, guint64, guint, 
Glib::RefPtr<Gst::Buffer>& > SlotGetrange;
+
   /** Creates a new pad with the given name in the given direction.
    *
    * @param name The name of the new pad.
@@ -353,6 +359,12 @@ public:
   void set_event_function(const SlotEvent& slot);
   friend gboolean Pad_Query_gstreamermm_callback(GstPad* pad, GstObject* parent, GstQuery* query);
   void set_query_function(const SlotQuery& slot);
+  friend gboolean Pad_Activate_gstreamermm_callback(GstPad* pad, GstObject* parent);
+  void set_activate_function(const SlotActivate& slot);
+  friend gboolean Pad_Activatemode_gstreamermm_callback(GstPad* pad, GstObject* parent, GstPadMode mode, 
gboolean active);
+  void set_activatemode_function(const SlotActivatemode& slot);
+  friend GstFlowReturn Pad_Getrange_gstreamermm_callback(GstPad* pad, GstObject* parent, guint64 offset, 
guint length, GstBuffer **buffer);
+  void set_getrange_function(const SlotGetrange& slot);
 
     //C API specific pad callback setting functions are ignored.
     _IGNORE(
@@ -404,6 +416,9 @@ private:
   SlotChain slot_chain;
   SlotEvent slot_event;
   SlotQuery slot_query;
+  SlotActivate slot_activate;
+  SlotActivatemode slot_activatemode;
+  SlotGetrange slot_getrange;
 };
 
 class PadProbeInfo


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