[gst-cvs] gstreamer-sharp: Fix the Gst.Task bindings
Sebastian Dröge
slomo at kemper.freedesktop.org
Mon Apr 27 03:49:10 PDT 2009
Module: gstreamer-sharp
Branch: master
Commit: 48a5bce6892d9db0be12f0c95f6ad2df4ffd1688
URL: http://cgit.freedesktop.org/gstreamer/gstreamer-sharp/commit/?id=48a5bce6892d9db0be12f0c95f6ad2df4ffd1688
Author: Sebastian Dröge <sebastian.droege at collabora.co.uk>
Date: Mon Apr 27 12:34:20 2009 +0200
Fix the Gst.Task bindings
What still needs to be done is to add a way to set
a custom lock to the task, currently a newly created
task can only get a lock by making it a pad task.
---
gstreamer-sharp/Gstreamer.metadata | 13 ++++++++++++
gstreamer-sharp/Makefile.am | 1 +
gstreamer-sharp/Task.custom | 39 ++++++++++++++++++++++++++++++++++++
gstreamer-sharp/glue/Makefile.am | 1 +
gstreamer-sharp/glue/task.c | 13 ++++++++++++
5 files changed, 67 insertions(+), 0 deletions(-)
diff --git a/gstreamer-sharp/Gstreamer.metadata b/gstreamer-sharp/Gstreamer.metadata
index c80d68c..d298406 100644
--- a/gstreamer-sharp/Gstreamer.metadata
+++ b/gstreamer-sharp/Gstreamer.metadata
@@ -701,6 +701,19 @@
<attr path="/api/namespace/struct[@name='TypeFind']/method[@name='Register']" name="hidden">1</attr>
<!-- FIXME: Bug https://bugzilla.novell.com/show_bug.cgi?id=323372 -->
+ <attr path="/api/namespace/object[@name='Task']/field" name="hidden">1</attr>
+ <attr path="/api/namespace/object[@name='Task']/method[@cname='gst_task_cleanup_all']" name="hidden">1</attr>
+ <remove-node path="/api/namespace/object[@name='Task']/method[@cname='gst_task_create']" />>
+ <add-node path="/api/namespace/object[@name='Task']">
+ <constructor cname="gst_task_create">
+ <parameters>
+ <parameter type="GstTaskFunction" name="func" />
+ <parameter type="gpointer" name="data" />
+ </parameters>
+ </constructor>
+ </add-node>
+
+ <!-- FIXME: Bug https://bugzilla.novell.com/show_bug.cgi?id=323372 -->
<attr path="/api/namespace/object[@name='TypeFindFactory']/field[@name='Caps']" name="hidden">1</attr>
<!-- FIXME: Bug https://bugzilla.novell.com/show_bug.cgi?id=323372 -->
<attr path="/api/namespace/object[@name='TypeFindFactory']/field[@name='Extensions']" name="hidden">1</attr>
diff --git a/gstreamer-sharp/Makefile.am b/gstreamer-sharp/Makefile.am
index 2999783..73b298c 100644
--- a/gstreamer-sharp/Makefile.am
+++ b/gstreamer-sharp/Makefile.am
@@ -66,6 +66,7 @@ customs = \
Object.custom \
PadTemplate.custom \
Plugin.custom \
+ Task.custom \
MiniObject.custom \
Registry.custom \
Query.custom \
diff --git a/gstreamer-sharp/Task.custom b/gstreamer-sharp/Task.custom
new file mode 100644
index 0000000..fd842ba
--- /dev/null
+++ b/gstreamer-sharp/Task.custom
@@ -0,0 +1,39 @@
+[DllImport ("gstreamersharpglue-0.10") ]
+extern static uint gstsharp_gst_task_get_cond_offset ();
+
+static uint cond_offset = gstsharp_gst_task_get_cond_offset ();
+private IntPtr CondPtr {
+ get {
+ unsafe {
+ IntPtr* raw_ptr = (IntPtr*) ( ( (byte*) Handle) + cond_offset);
+ return (*raw_ptr);
+ }
+ }
+}
+
+[DllImport ("libglib-2.0-0.dll") ]
+static extern void g_cond_wait (IntPtr cond, IntPtr mutex);
+[DllImport ("libglib-2.0-0.dll") ]
+static extern void g_cond_signal (IntPtr cond);
+
+public void Wait () {
+ g_cond_wait (CondPtr, LockPtr);
+}
+
+public void Signal () {
+ g_cond_signal (CondPtr);
+}
+
+[DllImport ("gstreamersharpglue-0.10") ]
+extern static uint gstsharp_gst_task_get_running_offset ();
+
+static uint running_offset = gstsharp_gst_task_get_running_offset ();
+public bool IsRunning {
+ get {
+ unsafe {
+ bool* raw_ptr = (bool*) ( ( (byte*) Handle) + running_offset);
+ return (*raw_ptr);
+ }
+ }
+}
+
diff --git a/gstreamer-sharp/glue/Makefile.am b/gstreamer-sharp/glue/Makefile.am
index 06676d1..5fe9674 100644
--- a/gstreamer-sharp/glue/Makefile.am
+++ b/gstreamer-sharp/glue/Makefile.am
@@ -10,6 +10,7 @@ libgstreamersharpglue_0_10_la_SOURCES = \
bin.c \
structure.c \
taglist.c \
+ task.c \
object.c \
gobject.c
diff --git a/gstreamer-sharp/glue/task.c b/gstreamer-sharp/glue/task.c
new file mode 100644
index 0000000..18b8ba5
--- /dev/null
+++ b/gstreamer-sharp/glue/task.c
@@ -0,0 +1,13 @@
+#include <gst/gst.h>
+
+uint
+gstsharp_gst_task_get_cond_offset (void)
+{
+ return (uint) G_STRUCT_OFFSET (GstTask, cond);
+}
+
+uint
+gstsharp_gst_task_get_running_offset (void)
+{
+ return (uint) G_STRUCT_OFFSET (GstTask, running);
+}
More information about the Gstreamer-commits
mailing list