Posts

You can almost use it

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.

Bugs. They are everywhere.

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.

Lazy week

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.

And action!

Unfortunately, I couldn’t continue working on the EPG part. Instead I worked some other things:

  • Added ChannelList D-Bus interface to retrieve information about channels.
  • Added GUI client to add and delete timers
  • Fixed several bugs

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's dvb-daemon progress

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.

The rise of the dvb-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:

  • Checking for duplicate events
  • Retrieve event with given id

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.

Last week's work on DVB daemon

Nothing big feature-wise has been added. Instead, I cleaned up the code a little bit and fixed some bugs.

  • Added possibility to delete recordings
  • Improved encoding patch for GStreamer’s mpegtsparse to handle multibyte encodings (the patch is already committed)
  • Came up with interface to access EPG. Nothing implemented, yet, just method stubs
  • Continued working on the Scanner. It still isn’t finished. Just need to find a good way to get and store all values necessary for channels.conf

The past and the future

I didn’t get everything done I intended to last week. The most notable changes are:

  • I implemented a class RecordingsStore that manages the finished recordings
  • Information stored in the Recording class is written to disk when the recordings is stopped that it can be restored next time the daemon starts
  • The recording will be stopped when an error appears while recording
  • Extended the Manager class. You have to register a device first, before you can use the Recorder of the device. It isn’t accessible trough D-Bus anymore because Vala doesn’t support arrays with D-Bus, yet.
  • Timers can be stored to disk and restored. However, this feature is currently not used, because I’m not sure what’s the best location to store them
  • The patch that will convert all encodings to proper UTF-8 in GStreamer’s mpegtsparse is basically ready. Zaheer is currently testing it.

Let's record

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.

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.