Friday, July 14, 2006

Bugs: no progress

During the last days I had problems with compiling kdelibs4. Matthias has updated phonon implementation in kdelibs4_snapshot, so I had to catch up whith that new code and install the new snapshot.
KDE4 will ship with Qt 4.2.x: for this reason the KDE4 svn qt-copy has been updated to the new 4.2.0. This version is now required to install KDE4 libs.
KDE svn hosts a copy of Qt where patches not already accepted by Qt developers are availabele: qt-copy. qt-copy has a patches subdir and an apply_patches script that applies them and keeps track of already applied patches.
Well things changed and the apply_patches script has become buggy: some patches marked as already applied are not applied... booom. I had to figure out what the prbolem was, contacted David, and finally applied a patch to fix that script.
The good news is that (after recompiling Qt, kdelibs & C.o.) a bug that prevented ByteStream from working has vanished! Great! It must have been a cmake cuased bug, it was a nasty bug that made this pointer become 0x0 after a simple member function call... I was going mad figuring out where that bug was coming from and spent quite a lot of time on it! Luckily it is gone now!
My next step will be AudioOutput.
I'm really looking forward to make config-proxy work again using dbus.

Sunday, July 02, 2006

Yay! Some fast progress now!

After resolving the kdelibs problems I started trying to improve the already (somehow) working ByteStream. One of the first things I wanted to do was to reconsider the way time reporting is done in the backend: even if NMM can sent time progrss events, the backend was using an internal timer to do time reporting. Talking to My mentors and to fub (Bernard) they all agreed that a nice thing to do would have been to use the NMM events to signal time progress. Well I was just looking at it and... done. It was indeed quite easy. And I think it could have been done even in an easier way!

In order to do it I:
Moved the callback functions from MediaObject to AbstreactMediaProducer (so they will be usefull in ByteStream too one day)
Added an Phonon::AudioPath::insertInto(NMM::GraphHandler) that inserts the AudioPath's branch into the GraphHandler. This is called from internal_addBranch in Phonon::AbstreactMediaProducer.
Made the Phonon::AudioOutput create a sink Node in the constructor (it will use info from kcm to decide the node type) and enabled setTimeProgress events from that node.
Made Phonon::AudioPath add its Phonon::AudioOutput's sink (already created) Node to the NMM::GraphHandler.

This changes make the backed architecture reflect the NMM::GraphHandler architecture better : Phonon::AudioOutput wraps a sink Node, Phonon::AudioPath wraps a brach in NMM::GraphHandler, and Phonon::AbstreactMediaProducer wraps the wole Phonon::AbstreactMediaProducer.

Thanks to this changes (that enable the sink node to send progrss events) it was easy to attach those events to callbacks in Phonon::AbstreactMediaProducer that report the event to KDE using QT signals.