DVB Manager status report

As mentioned in my previous post I can't continue working on the scanning code, because of a bug in Vala. Therefore, I worked on scheduling recordings and actually recording the channel in time (for DVB-T). It's still pretty rough, but recording works. Despite the fact that recordings don't end.

That has to do with the time calculations that are necessary to figure out if the duration of the recording is already reached. Does anybody now a library (ideally already available through Vala) that does the time and date calculations for me? I couldn't find what I needed in GLib. Basically, I have a start time with year, month, day, hour and minute and a duration of the recording. Want I want is the end time of the recording in the same format as the start time.

Furthermore, I completed a reader of channels.conf for DVB-T. In the next week I plan to

  • extend the reader that it can read channels.conf for DVB-S and DVB-C, too
  • Write a writer of channels.conf file
  • Implement recording for DVB-S and DVB-C. Unfortunately, I won't be able to test one of them, as I only have access to DVB-T
  • Polish the recorder (thread-safety, sanity checks)
  • Make recorder accessible trough D-Bus

You can checkout all the code with
bzr branch http://www.gnome.org/~sebp/bzr/dvb-daemon



I ran in the same problem as you. For now I patched gstreamer-0.10.vapi with the patch at the bottom.

In the code using it you just use pointers.

So something like

Gst.Value *val

val = Structure.get_value("width");

=== modified file 'vapi/gstreamer-0.10.vapi'
--- vapi/gstreamer-0.10.vapi 2008-05-25 19:24:44 +0000
+++ vapi/gstreamer-0.10.vapi 2008-05-25 20:14:44 +0000
@@ -1042,12 +1042,12 @@
public GLib.Quark get_name_id ();
public weak string get_string (string fieldname);
public bool get_uint (string fieldname, out uint value);
- public GLib.Value get_value (string fieldname);
+ public Gst.Value* get_value (string fieldname);
public bool has_field (string fieldname);
public bool has_field_typed (string fieldname, GLib.Type type);
public bool has_name (string name);
public static weak Gst.Structure id_empty_new (GLib.Quark quark);
- public GLib.Value id_get_value (GLib.Quark field);
+ public Gst.Value* id_get_value (GLib.Quark field);
public void id_set (GLib.Quark fieldname, ...);
public void id_set_valist (GLib.Quark fieldname, void* varargs);
public void id_set_value (GLib.Quark field, GLib.Value value);
@@ -1756,15 +1756,15 @@
public void list_prepend_value (Gst.Value prepend_value);
public void list_concat (Gst.Value value1, Gst.Value value2);
public uint list_get_size ();
- public Gst.Value list_get_value (uint index);
+ public Gst.Value* list_get_value (uint index);
public void set_fraction (int numerator, int denominator);
public int get_fraction_numerator ();
public int get_fraction_denominator ();
public static bool fraction_multiply (GLib.Value product, GLib.Value factor1, GLib.Value factor2);
public static bool fraction_subtract (GLib.Value dest, GLib.Value minuend, GLib.Value subtrahend);
public void set_fraction_range (Gst.Value start, Gst.Value end);
- public Gst.Value get_fraction_range_min ();
- public Gst.Value get_fraction_range_max ();
+ public Gst.Value* get_fraction_range_min ();
+ public Gst.Value* get_fraction_range_max ();
public void set_fraction_range_full (int numerator_start, int denominator_start, int numerator_end, int denominator_end);
public void set_date (Gst.Date date);
public Gst.Date get_date ();
@@ -1793,7 +1793,7 @@
public static bool can_intersect (Gst.Value value1, Gst.Value value2);
public void array_append_value (Gst.Value append_value);
public uint array_get_size ();
- public Gst.Value array_get_value (uint index);
+ public Gst.Value* array_get_value (uint index);
public void array_prepend_value (Gst.Value prepend_value);
[CCode (cheader_filename = "gst/gst.h")]