As mentioned in last week’s report, I concentrated on an assistant to setup DVB cards and a preferences GUI to create new device groups and edit existing ones. Currently, there are three GUI applications. One to manage timers, one to manage devices and one to setup your cards. In the next couple of weeks I’m going to make those UIs nicer and merge all of them in one single application.
The wizard works for DVB-T and DVB-S. DVB-C support is coming soon. In addition, I did some refactoring which resulted in renamed, removed and new methods and fixed some bugs I came across. Both UIs require a patch that isn’t committed to GStreamer CVS, yet, because a freeze is in progress.
Last week my second DVB-T adapter arrived. Therefore, I was able to test whether recording on multiple devices that are part of the same group works. At first it didn’t and I had to do quite some refactoring to get it working. Nevertheless, it finally works. In addition, I tried to add support of recording multiple channels that are part of the same transport stream. The code is there, but it behaves weird. First, both recordings stopped when the second recording started. Pausing the pipeline when changing dvbbasebin’s program-number property resulted in a working recording for the first channel and a damaged recording for the second (there was no video and sound from the first one). I still have another problem with GStreamer core + base 0.10.20 and bad from cvs on Ubuntu hardy. It gives me criticals and segfaults when retrieving EPG of one particular channel. I could confirm this on another machine with the same setup. Unfortunately, Zaheer isn’t able to reproduce this.
I didn’t do much last week. Partly, because bug 539969 still keeps me from continuing working on the EPG part. What did change last week is that each Device must be part of a DeviceGroup now. All devices in a DeviceGroup must be of same type and share one channels.conf and recordings’ dir. That means that each DeviceGroup has its own Recorder and ChannelList D-Bus service now. A DeviceGroup becomes helpful when it contains more than one device. You can schedule timers that overlap and dvb-daemon distributes them across the devices that no conflicts arise.
Unfortunately, I couldn’t continue working on the EPG part. Instead I worked some other things:
Frank Scholz continued integrating dvb-daemon into Coherence. I created a screencast that shows how you can access recordings from dvb-daemon in Totem with the help of Coherence’s UPnP server:
Last week wasn’t as productive as I wished. Nevertheless, here’s my report. Thanks to Jürg’s awesome work all D-Bus interfaces are working and can be accessed by other applications. Except, Manager’s GetRegisteredDevices method which doesn’t work because of bug 540730. I tried to continue on storing EPG data, but unfortunately came across bug 539969 quickly. Furthermore, all registered devices together with their channels.conf and timers are stored in GConf and are restored when the daemon is started again. That means that the daemon is actually usable and you don’t have to re-compile the code to add a new timer. I extended the sample client, written in Python, too. It makes use of all the D-Bus interfaces of the daemon.
I was able to complete all tasks I wanted to last week. The Scanner works completely for DVB-T and supposably for DVB-S and DVB-C. The Scanner contains a new method WriteChannelsToFile, too. In addition, I started work on the EPGScanner that scans in fixed intervals for EPG data on each channel. Currently, the data is just read and stored in the Channel it belongs to ordered by time. Still missing are:
I’m not sure how I should make the EPG data accessible. Separately, for each device? In a central place with merged data from all sources? Any recommendations are highly appreciated.
Nothing big feature-wise has been added. Instead, I cleaned up the code a little bit and fixed some bugs.
I didn’t get everything done I intended to last week. The most notable changes are:
Last week has been successful and almost all tasks have been completed. That means that channel.conf can be read and written for all DVB types. Recording should work for all DVB types, too (as already mentioned I myself can only test DVB-T). In addition, recordings are actually stopped after the given duration. I couldn’t write a D-Bus interface for the Recorder, though. That’s because Vala can’t export arrays over D-Bus, yet. But I’m sure this feature will be added soon. Instead, I could work on the Scanner, because Jürg fixed the bug that previously blocked the work in this area. However, the scanner isn’t working and complete, yet.
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.