From: Sebastian Dröge Date: Thu, 16 Apr 2009 19:52:21 +0000 (+0200) Subject: Use new custom GLib.Value support for gtk-sharp trunk X-Git-Tag: 1.19.3~483^2~718 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8e216fcd21a88f4f1ad21047880500c0507a5d50;p=platform%2Fupstream%2Fgstreamer.git Use new custom GLib.Value support for gtk-sharp trunk --- diff --git a/gstreamer-sharp/Buffer.custom b/gstreamer-sharp/Buffer.custom index 631e404..d69f045 100644 --- a/gstreamer-sharp/Buffer.custom +++ b/gstreamer-sharp/Buffer.custom @@ -1,6 +1,8 @@ [DllImport ("gstreamer-0.10.dll") ] static extern IntPtr gst_buffer_try_new_and_alloc (uint size); +public Buffer (GLib.Value val) : base (val) { } + public Buffer (uint size) { IntPtr raw = gst_buffer_try_new_and_alloc (size); if (raw == IntPtr.Zero) @@ -195,3 +197,6 @@ public ulong OffsetEnd { } } +static Buffer () { + GLib.GType.Register (Buffer.GType, typeof (Buffer)); +} diff --git a/gstreamer-sharp/DynamicSignal.cs b/gstreamer-sharp/DynamicSignal.cs index 9d2718e..462a519 100644 --- a/gstreamer-sharp/DynamicSignal.cs +++ b/gstreamer-sharp/DynamicSignal.cs @@ -133,12 +133,12 @@ namespace Gst { static void OnMarshal (IntPtr closure, ref GLib.Value retval, uint argc, IntPtr argsPtr, IntPtr ihint, IntPtr data) { object [] args = new object[argc - 1]; - object o = Gst.Value.GetValue ( (GLib.Value) Marshal.PtrToStructure (argsPtr, typeof (GLib.Value))); + object o = ( (GLib.Value) Marshal.PtrToStructure (argsPtr, typeof (GLib.Value))).Val; for (int i = 1; i < argc; i++) { IntPtr struct_ptr = (IntPtr) ( (long) argsPtr + (i * gvalue_struct_size)); GLib.Value argument = (GLib.Value) Marshal.PtrToStructure (struct_ptr, typeof (GLib.Value)); - args[i - 1] = Gst.Value.GetValue (argument); + args[i - 1] = argument.Val; } if (data == IntPtr.Zero) { @@ -256,7 +256,7 @@ namespace Gst { query = (SignalQuery) SignalEmitInfo[key]; GLib.Value[] signal_parameters = new GLib.Value[query.n_params + 1]; - signal_parameters[0] = Gst.Value.CreateValue (o); + signal_parameters[0] = new GLib.Value (o); if (parameters.Length != query.n_params) throw new ApplicationException (String.Format ("Invalid number of parameters: expected {0}, got {1}", query.n_params, parameters.Length)); @@ -268,7 +268,7 @@ namespace Gst { if (expected_type != given_type && ! given_type.IsSubclassOf (given_type)) throw new ApplicationException (String.Format ("Invalid parameter type: expected {0}, got {1}", expected_type, given_type)); - signal_parameters[i + 1] = Gst.Value.CreateValue (parameters[i]); + signal_parameters[i + 1] = new GLib.Value (parameters[i]); } GLib.Value return_value = new GLib.Value (); @@ -280,7 +280,7 @@ namespace Gst { g_signal_emitv (signal_parameters, query.signal_id, signal_detail_quark, ref return_value); - return (query.return_type != GType.Invalid && query.return_type != GType.None) ? Gst.Value.GetValue (return_value) : null; + return (query.return_type != GType.Invalid && query.return_type != GType.None) ? return_value.Val : null; } [DllImport ("gstreamersharpglue-0.10") ] diff --git a/gstreamer-sharp/MiniObject.custom b/gstreamer-sharp/MiniObject.custom index 0d641a1..94f04cd 100644 --- a/gstreamer-sharp/MiniObject.custom +++ b/gstreamer-sharp/MiniObject.custom @@ -2,11 +2,8 @@ protected MiniObject () : base () { } -public static MiniObject NewFromValue (GLib.Value val) { - IntPtr type = gstsharp_g_value_type (ref val); - GLib.GType gtype = new GLib.GType (type); - - return (MiniObject) GLib.Opaque.GetOpaque (gst_value_get_mini_object (ref val), (Type) gtype, false); +public MiniObject (GLib.Value val) : base () { + Raw = gst_value_dup_mini_object (ref val); } public static explicit operator GLib.Value (MiniObject o) { @@ -17,12 +14,16 @@ public static explicit operator GLib.Value (MiniObject o) { return val; } +public void SetGValue (ref GLib.Value val) { + gst_value_set_mini_object (ref val, Handle); +} + [DllImport ("gstreamersharpglue-0.10.dll") ] private static extern IntPtr gstsharp_g_type_from_instance (IntPtr o); [DllImport ("gstreamersharpglue-0.10.dll") ] private static extern IntPtr gstsharp_g_value_type (ref GLib.Value val); [DllImport ("gstreamer-0.10.dll") ] -private static extern IntPtr gst_value_get_mini_object (ref GLib.Value v); +private static extern IntPtr gst_value_dup_mini_object (ref GLib.Value v); [DllImport ("gstreamer-0.10.dll") ] private static extern void gst_value_set_mini_object (ref GLib.Value v, IntPtr o); diff --git a/gstreamer-sharp/Structure.custom b/gstreamer-sharp/Structure.custom index 4e1ffd0..dcc3c14 100644 --- a/gstreamer-sharp/Structure.custom +++ b/gstreamer-sharp/Structure.custom @@ -122,11 +122,11 @@ public object Get (string field) { GLib.Value v; v = GetValue (field); - return Gst.Value.GetValue (v); + return v.Val; } public void Set (string field, object value) { - SetValue (field, Gst.Value.CreateValue (value)); + SetValue (field, new GLib.Value (value)); } public void Set (params object[] fields) { @@ -136,20 +136,16 @@ public void Set (params object[] fields) { throw new ArgumentException (); for (i = 0; i < length; i += 2) { - SetValue (fields[i] as string, Gst.Value.CreateValue (fields[i+1])); + SetValue (fields[i] as string, new GLib.Value (fields[i+1])); } } public object this [string field] { set { - GLib.Value v; - if (field == null) throw new ArgumentNullException (); - v = Gst.Value.CreateValue (value); - - Set (field, v); + Set (field, value); } get { if (field == null) diff --git a/gstreamer-sharp/Value.cs b/gstreamer-sharp/Value.cs index 8777acf..f45cba0 100644 --- a/gstreamer-sharp/Value.cs +++ b/gstreamer-sharp/Value.cs @@ -8,62 +8,6 @@ using GLib; /* TODO: intersect, compare, substract, .... */ namespace Gst { - public static class Value { - public static object GetValue (GLib.Value val) { - IntPtr type = gstsharp_g_value_type (ref val); - GType gtype = new GType (type); - - if (type == Fraction.GType.Val) - return new Fraction (val); - else if (type == DoubleRange.GType.Val) - return new DoubleRange (val); - else if (type == IntRange.GType.Val) - return new IntRange (val); - else if (type == FractionRange.GType.Val) - return new FractionRange (val); - else if (type == Fourcc.GType.Val) - return new Fourcc (val); - else if (type == Date.GType.Val) - return new Date (val); - else if (type == Gst.List.GType.Val) - return new Gst.List (val); - else if (type == Gst.Array.GType.Val) - return new Gst.Array (val); - else if ( ( (Type) gtype).IsSubclassOf (typeof (Gst.MiniObject))) - return MiniObject.NewFromValue (val); - else - return val.Val; - } - - [DllImport ("gstreamersharpglue-0.10.dll") ] - private static extern IntPtr gstsharp_g_value_type (ref GLib.Value val); - - public static GLib.Value CreateValue (object o) { - if (o.GetType () == typeof (Fraction)) - return (GLib.Value) ( (Fraction) o); - else if (o.GetType () == typeof (DoubleRange)) - return (GLib.Value) ( (DoubleRange) o); - else if (o.GetType () == typeof (IntRange)) - return (GLib.Value) ( (IntRange) o); - else if (o.GetType () == typeof (FractionRange)) - return (GLib.Value) ( (FractionRange) o); - else if (o.GetType () == typeof (Fourcc)) - return (GLib.Value) ( (Fourcc) o); - else if (o.GetType () == typeof (Date)) - return (GLib.Value) ( (Date) o); - else if (o.GetType () == typeof (DateTime)) - return (GLib.Value) (new Date ( (DateTime) o)); - else if (o.GetType () == typeof (Gst.List)) - return (GLib.Value) ( (Gst.List) o); - else if (o.GetType () == typeof (Gst.Array)) - return (GLib.Value) ( (Gst.Array) o); - else if (o.GetType ().IsSubclassOf (typeof (Gst.MiniObject))) - return (GLib.Value) ( (MiniObject) o); - else - return new GLib.Value (o); - } - } - public struct Fraction { public int Numerator { get { @@ -135,6 +79,10 @@ namespace Gst { this.denominator = gst_value_get_fraction_denominator (ref val); } + public void SetGValue (ref GLib.Value val) { + gst_value_set_fraction (ref val, Numerator, Denominator); + } + public override string ToString () { return String.Format ("{0}/{1}", numerator, denominator); } @@ -166,6 +114,10 @@ namespace Gst { return new Fraction (a.Numerator * b.Denominator, a.Denominator * b.Numerator); } + static Fraction () { + GLib.GType.Register (Fraction.GType, typeof (Fraction)); + } + [DllImport ("gstreamer-0.10.dll") ] private static extern void gst_value_set_fraction (ref GLib.Value v, int numerator, int denominator); [DllImport ("gstreamer-0.10.dll") ] @@ -203,6 +155,10 @@ namespace Gst { return String.Format ("[{0}, {1}]", Min, Max); } + public void SetGValue (ref GLib.Value val) { + gst_value_set_double_range (ref val, Min, Max); + } + public static explicit operator GLib.Value (DoubleRange range) { GLib.Value val = new GLib.Value (DoubleRange.GType); @@ -210,6 +166,10 @@ namespace Gst { return val; } + static DoubleRange () { + GLib.GType.Register (DoubleRange.GType, typeof (DoubleRange)); + } + [DllImport ("gstreamer-0.10.dll") ] private static extern IntPtr gst_double_range_get_type (); [DllImport ("gstreamer-0.10.dll") ] @@ -243,6 +203,10 @@ namespace Gst { this.Max = gst_value_get_int_range_max (ref val); } + public void SetGValue (ref GLib.Value val) { + gst_value_set_int_range (ref val, Min, Max); + } + public override string ToString () { return String.Format ("[{0}, {1}]", Min, Max); } @@ -254,6 +218,10 @@ namespace Gst { return val; } + static IntRange () { + GLib.GType.Register (IntRange.GType, typeof (IntRange)); + } + [DllImport ("gstreamer-0.10.dll") ] private static extern IntPtr gst_int_range_get_type (); [DllImport ("gstreamer-0.10.dll") ] @@ -293,8 +261,14 @@ namespace Gst { min = (GLib.Value) Marshal.PtrToStructure (min_ptr, typeof (GLib.Value)); max = (GLib.Value) Marshal.PtrToStructure (max_ptr, typeof (GLib.Value)); - this.Min = (Fraction) Gst.Value.GetValue (min); - this.Max = (Fraction) Gst.Value.GetValue (max); + this.Min = (Fraction) min.Val; + this.Max = (Fraction) max.Val; + } + + public void SetGValue (ref GLib.Value val) { + GLib.Value min = new GLib.Value (Min); + GLib.Value max = new GLib.Value (Max); + gst_value_set_fraction_range (ref val, ref min, ref max); } public override string ToString () { @@ -304,12 +278,16 @@ namespace Gst { public static explicit operator GLib.Value (FractionRange range) { GLib.Value val = new GLib.Value (FractionRange.GType); - GLib.Value min = (GLib.Value) (range.Min); - GLib.Value max = (GLib.Value) (range.Max); + GLib.Value min = new GLib.Value (range.Min); + GLib.Value max = new GLib.Value (range.Max); gst_value_set_fraction_range (ref val, ref min, ref max); return val; } + static FractionRange () { + GLib.GType.Register (FractionRange.GType, typeof (FractionRange)); + } + [DllImport ("gstreamer-0.10.dll") ] private static extern IntPtr gst_fraction_range_get_type (); [DllImport ("gstreamer-0.10.dll") ] @@ -356,6 +334,10 @@ namespace Gst { public Fourcc (GLib.Value val) : this (gst_value_get_fourcc (ref val)) { } + public void SetGValue (ref GLib.Value val) { + gst_value_set_fourcc (ref val, Val); + } + public override string ToString () { return String.Format ("{0}{1}{2}{3}", (char) ( (Val >> 24) & 0xff), (char) ( (Val >> 16) & 0xff), @@ -382,6 +364,10 @@ namespace Gst { return fourcc.ToString (); } + static Fourcc () { + GLib.GType.Register (Fourcc.GType, typeof (Fourcc)); + } + [DllImport ("gstreamer-0.10.dll") ] private static extern IntPtr gst_fourcc_get_type (); [DllImport ("gstreamer-0.10.dll") ] @@ -414,21 +400,30 @@ namespace Gst { this.Val = new DateTime (g_date_get_year (date), g_date_get_month (date), g_date_get_day (date)); } + public void SetGValue (ref GLib.Value val) { + IntPtr date_ptr = g_date_new_dmy ( (byte) Val.Day, (int) Val.Month, (ushort) Val.Year); + + gst_value_set_date (ref val, date_ptr); + + GLib.Marshaller.Free (date_ptr); + } + public override string ToString () { return String.Format ("{0}-{1}-{2}", Val.Year, Val.Month, Val.Day); } public static explicit operator GLib.Value (Date date) { GLib.Value val = new GLib.Value (Date.GType); - IntPtr date_ptr = g_date_new_dmy ( (byte) date.Val.Day, (int) date.Val.Month, (ushort) date.Val.Year); - gst_value_set_date (ref val, date_ptr); - - GLib.Marshaller.Free (date_ptr); + date.SetGValue (ref val); return val; } + static Date () { + GLib.GType.Register (Date.GType, typeof (Date)); + } + [DllImport ("libglib-2.0-0.dll") ] private static extern byte g_date_get_day (IntPtr date); [DllImport ("libglib-2.0-0.dll") ] @@ -466,7 +461,14 @@ namespace Gst { for (uint i = 0; i < n; i++) { IntPtr v_ptr = gst_value_list_get_value (ref val, i); GLib.Value v = (GLib.Value) Marshal.PtrToStructure (v_ptr, typeof (GLib.Value)); - this.content.Add (Gst.Value.GetValue (v)); + this.content.Add (v.Val); + } + } + + public void SetGValue (ref GLib.Value val) { + foreach (object o in content) { + GLib.Value v = new GLib.Value (o); + gst_value_list_append_value (ref val, ref v); } } @@ -488,7 +490,7 @@ namespace Gst { GLib.Value val = new GLib.Value (List.GType); foreach (object o in l.content) { - GLib.Value v = Gst.Value.CreateValue (o); + GLib.Value v = new GLib.Value (o); gst_value_list_append_value (ref val, ref v); } @@ -508,6 +510,10 @@ namespace Gst { } } + static List () { + GLib.GType.Register (List.GType, typeof (List)); + } + [DllImport ("gstreamer-0.10.dll") ] private static extern IntPtr gst_value_list_get_type (); [DllImport ("gstreamer-0.10.dll") ] @@ -538,7 +544,14 @@ namespace Gst { for (uint i = 0; i < n; i++) { IntPtr v_ptr = gst_value_array_get_value (ref val, i); GLib.Value v = (GLib.Value) Marshal.PtrToStructure (v_ptr, typeof (GLib.Value)); - this.content.Add (Gst.Value.GetValue (v)); + this.content.Add (v.Val); + } + } + + public void SetGValue (ref GLib.Value val) { + foreach (object o in content) { + GLib.Value v = new GLib.Value (o); + gst_value_array_append_value (ref val, ref v); } } @@ -546,7 +559,7 @@ namespace Gst { GLib.Value val = new GLib.Value (Gst.Array.GType); foreach (object o in a.content) { - GLib.Value v = Gst.Value.CreateValue (o); + GLib.Value v = new GLib.Value (o); gst_value_array_append_value (ref val, ref v); } @@ -580,6 +593,10 @@ namespace Gst { } } + static Array () { + GLib.GType.Register (Array.GType, typeof (Array)); + } + [DllImport ("gstreamer-0.10.dll") ] private static extern IntPtr gst_value_array_get_type (); [DllImport ("gstreamer-0.10.dll") ]