public object this[string property] { get { if (PropertyExists (property)) { using (GLib.Value v = GetProperty (property)) { return v.Val; } } else throw new PropertyNotFoundException (); } set { if (PropertyExists (property)) { if (value == null) { throw new ArgumentNullException (); } var type = value.GetType (); var gtype = (GLib.GType)type; if (gtype == null) { throw new Exception ("Could not find a GType for type " + type.FullName); } GLib.Value v = new GLib.Value ((GLib.GType)value.GetType ()); v.Val = value; SetProperty (property, v); v.Dispose (); } else throw new PropertyNotFoundException (); } }
public void Add(Gst.TagMergeMode mode, string tag, object value) { if (!Tag.Exists (tag)) throw new ArgumentException (String.Format ("Invalid tag name '{0}'", tag)); GLib.Value v = new GLib.Value (value); AddValue (mode, tag, v); v.Dispose (); }
public PropertyInfo (IntPtr pspec_ptr) { GParamSpec pspec = (GParamSpec) Marshal.PtrToStructure (pspec_ptr, typeof (GParamSpec)); IntPtr name = g_param_spec_get_name (pspec_ptr); IntPtr nick = g_param_spec_get_nick (pspec_ptr); IntPtr blurb = g_param_spec_get_blurb (pspec_ptr); this.name = Gst.GLib.Marshaller.Utf8PtrToString (name); this.nick = Gst.GLib.Marshaller.Utf8PtrToString (nick); this.blurb = Gst.GLib.Marshaller.Utf8PtrToString (blurb); this.readable = ( (pspec.Flags & (1 << 0)) != 0); this.writeable = ( (pspec.Flags & (1 << 1)) != 0); this.controllable = ( (pspec.Flags & (1 << 9)) != 0); /* TODO: Add more flags later, like the mutable flags */ this.gtype = new Gst.GLib.GType (pspec.ValueType); this.type = (System.Type) this.gtype; this.dflt = this.min = this.max = null; try { Gst.GLib.Value v = new Gst.GLib.Value (new Gst.GLib.GType (pspec.ValueType)); g_param_value_set_default (pspec_ptr, ref v); this.dflt = v.Val; v.Dispose (); if (EnumInfo.IsEnumType (this.gtype)) { EnumInfo ei = new EnumInfo (this.gtype); this.min = ei.Min; this.max = ei.Max; } else { Gst.GLib.Value min = new Gst.GLib.Value (new Gst.GLib.GType (pspec.ValueType)); Gst.GLib.Value max = new Gst.GLib.Value (new Gst.GLib.GType (pspec.ValueType)); if (gstsharp_g_param_spec_get_range (pspec_ptr, ref min, ref max)) { this.min = (object) min.Val; this.max = (object) max.Val; } min.Dispose (); max.Dispose (); } } catch (Exception) {} }
public void SetGValue (ref Gst.GLib.Value val) { foreach (object o in content) { Gst.GLib.Value v = new Gst.GLib.Value (o); gst_value_array_append_value (ref val, ref v); v.Dispose (); } }
public void SetGValue (ref Gst.GLib.Value val) { Gst.GLib.Value min = new Gst.GLib.Value (Min); Gst.GLib.Value max = new Gst.GLib.Value (Max); gst_value_set_fraction_range (ref val, ref min, ref max); min.Dispose (); max.Dispose (); }
public static object Emit (Gst.GLib.Object o, string name, params object[] parameters) { SignalQuery query; IntPtr type = gstsharp_g_type_from_instance (o.Handle); GType gtype = new GType (type); string signal_name, signal_detail; uint signal_detail_quark = 0; int colon; colon = name.LastIndexOf ("::"); if (colon == -1) { signal_name = name; signal_detail = String.Empty; } else { signal_name = name.Substring (0, colon); signal_detail = name.Substring (colon + 2); } GTypeSignalKey key = new GTypeSignalKey (gtype, signal_name); if (SignalEmitInfo[key] == null) { IntPtr native_string = Gst.GLib.Marshaller.StringToPtrGStrdup (signal_name); uint signal_id = g_signal_lookup (native_string, type); Gst.GLib.Marshaller.Free (native_string); if (signal_id == 0) throw new NotSupportedException (String.Format ("{0} has no signal of name {1}", o, name)); GSignalQuery q = new GSignalQuery (); g_signal_query (signal_id, ref q); if (q.signal_id == 0) throw new NotSupportedException (String.Format ("{0} couldn't be queried for signal with name {1}", o, name)); query = new SignalQuery (); query.signal_id = signal_id; query.signal_name = Gst.GLib.Marshaller.Utf8PtrToString (q.signal_name); query.itype = new GType (q.itype); query.signal_flags = q.signal_flags; query.return_type = new GType (q.return_type); query.n_params = q.n_params; query.param_types = new Type[q.n_params]; for (int i = 0; i < query.n_params; i++) { IntPtr t = Marshal.ReadIntPtr (q.param_types, i); GType g = new GType (t); query.param_types[i] = (Type) g; } SignalEmitInfo.Add (key, query); } query = (SignalQuery) SignalEmitInfo[key]; Gst.GLib.Value[] signal_parameters = new Gst.GLib.Value[query.n_params + 1]; signal_parameters[0] = new Gst.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)); for (int i = 0; i < query.n_params; i++) { Type expected_type = (Type) query.param_types[i]; Type given_type = parameters[i].GetType (); 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] = new Gst.GLib.Value (parameters[i]); } Gst.GLib.Value return_value = new Gst.GLib.Value (); if (query.return_type != GType.Invalid && query.return_type != GType.None) return_value.Init (query.return_type); if (signal_detail != String.Empty) { IntPtr native_string = Gst.GLib.Marshaller.StringToPtrGStrdup (signal_detail); signal_detail_quark = g_quark_from_string (native_string); Gst.GLib.Marshaller.Free (native_string); } g_signal_emitv (signal_parameters, query.signal_id, signal_detail_quark, ref return_value); foreach (Gst.GLib.Value v in signal_parameters) v.Dispose (); object ret = (query.return_type != GType.Invalid && query.return_type != GType.None) ? return_value.Val : null; if (ret != null) return_value.Dispose (); return ret; }