Summary of this years GStreamer Summer of Code

Seems we had a very good Google summer of code this year with 5 of 5 projects all crossing the finish line and all resulting in mergeable code. I think our approach this year of doing less ‘blue sky’ and more clearly defined tasks worked out very well indeed.

To summarize the projects.

asfmux and asf rtp payloader – Thiago Sousa Santos finished this task very quickly and I have been using it with Transmageddon for a while now. The plugins are already merged into plugins-bad and as soon as it gotten more testing and exposure I think we would be ready to move it onwards from there. Thiago hasn’t been resting on his laurels after completing the muxer though, instead he has started hacking on porting our muxers to a new collectpads implementation which would enable us to support muxing things like subtitles into the files, which is needed for things like supporting subtitles in mp4 files for the PS3 for instance. Outstanding work.

MHEG support – MHEG is the DVB standard that allows functionality such as being able to press ‘the red button’ on broadcasts in britain to get further information or alternative TV streams, BBC for instance got this on Freeview.
Miquel Àngel Farré has been hard at work on this task and the patches for it is either in GStreamer already or will be merged once the current freeze is over. Some further integration work will be needed to enable this in for instance Totem, but that work is also underway. A big step forward for the DVB support in GStreamer, which already has seen GStreamer getting picked up to do TV set-top boxes and similar.

Support for Avisynth filters in GStreamer – Ruslan Ijbulatov has been working steadfastly on this and solving issues as they have arisen. The current code allows you to recompile any Avisynth element towards GStreamer, for use in GStreamer pipelines, with just some slight tweaking of the original code. While the original goal was to allow the use of these plugins unmodified this turned out to be untenable during the course of the project. Our new API though should make it easier to make avisynth filters cross platform. The code to enable the Avisynth filters are currently GPL as it contains code under that license from Avisynth, but we hope to get permission for a relicensing the parts of Avisynth code in there to the LGPL, so that if the avisynth plugin writers are willing we can get access to those plugins under a license better fitting GStreamer.

Ladspa2 plugins in GStreamer: David Robillard has been working on enabling the use of LV2 plugins in GStreamer. As the project name implies it was a project to enable the use of the new generation of LADSPA plugins from GStreamer applications, so that for instance Jokosher can get access to the new and improved LADSPA2 plugins. The project proceeded very well with most of the core code committed before the halfway evaluation of the SoC and the second half being used on polish and extension support. The code should be ready right now for projects to start hooking into these new elements.

MPEG PS muxer for GStreamer – Lin YANG has been pushing hard over the last weeks to get this over the finish line, and while the code is not yet merged into GStreamer git the muxer is ready and will be merged after the freeze. It is really great to have this muxer in place now as it basically means we got full muxer and demuxer support for all MPEG formats. Lin has also been working on some patches for our h264parser and the mpeg ts muxer, polishing up some rough corners here and there.

All in all I am very happy with how things turned out and combined with the much improved AMR support which Iago Toral Quiroga worked this summer unrelated to the SoC, I think we took some good steps forward this summer. I am also very confident that most and maybe even all of this years students will be hanging around and continuing their contributions to GStreamer during the winter.

I am personally especially happy about the MPEG PS and the ASF muxer both getting done, as that means that GStreamer now got support for all major container formats for both demuxing and muxing, which will be a huge blessing for content creation applications using GStreamer(only other format I can think of that with some kindness might be called major would be the Real media format, for which we only got a demuxer currently, maybe something for next years SoC :). So I will work on adding MPEG PS support to Transmageddon too now.

So a big thanks to all the students and mentors involved this year! And also a big thanks to Google of course for providing the funding for this effort.

Losing weight

Ever since I got back from Christmas in January I been actively working out and trying to lose weight. No crazy diets or anything though, just been trying to put some consideration into what I eat and drink, by trying to avoid things like fries and cola. Other small changes has been trying to eat a bowl of cereal (like Special K and similar) in the morning to avoid buying a baguette or something to carry me over to lunch. How successful I am in staying away from the worst offenders do wary a little from week to week, but I think that is fine as I don’t want to be religious about what I eat either. One thing that makes things a little hard is that the more work I work out, the bigger my appetite becomes, so part of the struggle is to keep eating at a normal level instead of nullifying the working out by eating shitloads more.

Been quite aggressive about the gym to, going there around 5 days a week. The plan has been to go to the gym every day, knowing that there will be stuff coming up hindering that, thus ending up on my ‘real goal’ of going 4-5 days a week. I also started walking back and forth to the office instead of biking.

Anyway, so in these now soon 9 Months I lost about 7-8 kilos total. Gone from weighing 106 kilo to 98 kilo, which I think isn’t to bad a weight for someone my height. Still plan to try to lose another 3-4 kilos, but since I have started with some strength building stuff in addition to the cardio, some of that slimming might get evened out weightwise by muscle growth.

Anyway, mostly writing this blog to held motivate myself for the next push downwards in weight :)

AMR in Transmageddon

So after the successful integration of the new AMR plugin into GStreamer, I went about doing some testing with Transmageddon. Discovered that it didn’t work so well. Turned out to be two different issues. First after some communication with Iago and then Martin Storsjö, Martin managed to fix some bugs in the original encoder which meant it was broken on x86_64 systems. Then even when that was fixed I couldn’t get Transmageddon to create a working file. I realized I should use the graph creation system to debug it, but this time I decided to add it as a permanent feature to Transmageddon, so that anything I or anyone else needed a graphical output of the transcoding process it would be very easy to do. So in the current git master version of Transmageddon you now have a ‘debug’ option under the Help menu. If you choose it, graphwiz and Eye of Gnome will be called, giving you a graphical representation of the pipeline at the time of choosing ‘debug’. With that in place I could quickly see that my audioresampler had ended up outside the standard pipeline and was able to fix the issue. After that encoding into amr-nb works without a hitch.

This screenshot of my desktop shows Transmageddon after having created a 3gpp file with AMR-NB audio, Totem playing that file and finally EOG displaying the pipeline used to create the file in Transmageddon. In fact you can create such images to view even if you don’t have any issues as it will not affect the successful completion of your transcoding process.

Great thing now is that any user of Transmageddon who experience a hang or similar can just choose ‘debug’ and add the debug image to a bug report. In a lot of cases I would be able to see exactly what goes wrong just from that. Having such a debug tool in the UI might not be the most usability PC thing to do, but at this stage in the development process I think there will be enough issues faced to warrant it.

A big thanks to Martin Storsjö for his effort today in fixing this issue, very much appreciated.

Collabora at the Gran Canaria Desktop Summit

Collabora had a large group of people at the Desktop Summit this year, and also a very large group giving talks. Since most of those talks either have slides online now, or both slides and video recordings I thought I list a little summary here for those interested.

So following the random order of our internal wiki:

  • Edward Hervey did a talk and short demo of the great strides forward we are making with PiTiVi
  • Guillaume Desmottes did a talk about how to use tubes and telepathy to make GNOME a more collaborative desktop
  • The Orkney islands own Will Thompson did a talk about profiling and optimizing d-bus APIs. Wills talk is also available on video
  • Pierre-Luc Beaudoin did a talk about libchamplain and Geoclue and how to make a location aware desktop
  • Youness Alaoui did a talk about our firewall punching library libnice
  • Ian Monroe did a talk about qtscript bindings for Telepathy. You can watch Ian in action here.
  • Olivier Crête did a talk on how to integrate farsight2 into your project
  • In addition to this Wim Taymans did a tutorial on RTP development using GStreamer and Davyd Madeley lead a BOF about writing documentation.

    Collabora and Free Codecs

    While I am of course very happy about the progress we are making in projects like GStreamer and Telepathy in regards to supporting all kind of formats and protocols, the thing we do care the most about here at Collabora is free codecs. I guess I often tend to talk in this blog about the more playback oriented parts of that puzzle, like Vorbis, Theora and Dirac, but there is another equally important field where free codecs have an important role to play and that is for communication. Collabora has already spent significant resources to ensure that Empathy can do video conferencing using Speex and Theora, but we feel that is just the beginning of what can be achieved.

    This is why we are very happy at Collabora to send out this position paper in support of a new IETF working group to define some free and open codecs targeted at voice over IP and similar solutions. Building on the existing work done in the form of Speex and CELT, I am sure great standardized solutions can be found in this field by the IETF through such a working group.

    Together with the effort behind pushing free formats through the Firefox, Opera and Chrome HTML support this is another step forward in making free formats viable and major players in the codec field.

    So once again be sure to check out our position statement on getting IETF to set up a work group for this.

    AMR support in GStreamer

    I blogged about some time ago the effort of Iago Toral Quiroga to use the Android AMR implementations to create GStreamer plugins. Work on that goal has been happening as part of bug 584890 and we finally managed to get it merged a few days ago. So in gst-plugins-ugly you now have a nice working set of AMR plugins for AMR-NB decoding and encoding and a plugin for AMR-WB decoding. Also included is a parser that handles both AMR-NB and AMR-WB.

    A major change in the scope of the plugins is that we no longer plan to include a full copy of the Android code, instead we are going to share a common copy with other projects, a package maintained by Martin Storsjö. This copy is hosted here on Sourceforge. For those wanting to test it out together with git master of gst-plugins-ugly and are using Fedora, I created these opencore-amr RPMS today based on their git master. The 0.1.1 release got some build system bugs which are fixed in git master, but the next release should build out on the box on most systems.

    A big Thank You to Iago and Martin!

    ASF muxing support in GStreamer

    We have seen some great progress so far on the GStreamer Google summer of code projects. The project I have been following the most closely as it has a direct impact on Transmageddon is Thiago Sousa Santos asfmuxing and Windows media RTP streaming project. It just hit a major milestone in the sense that Thiago commited the code he has been working on into gst-plugins-bad. The muxer works really well with Windows Media Audio and Video 1,2 and 3 (including VC1) supported and mp3 audio supported. I already added ASF support to Transmageddon based upon it and while we still have a few issues to sort out to enable remuxing support it is a really nice step forward for the GStreamer project. A big thanks to Thiago for his work so far.
    Screenshot of ASF creation with Transmageddon

    Real Networks makes me smile

    As many of probably have noticed GStreamer is experiencing fast growth in the embedded and mobile space with major companies shipping phones or other kind of devices using it. The Palm Pre being among the latest. Of course not everyone appreciate this as much as we do at Collabora Multimedia.

    Jan pointed me to this little piece of FUD that had been added to the GStreamer wikipedia article recently:

    While the project is licensed under LGPL, there is no copyright indemnity for source code available from Fluendo or other sources primarily because the GStreamer project does not collect copyright assignments from each and every one of its contributors. This incurs significant risk on commercial distributors of GStreamer.

    The funny part was that the IP address of the anonymous person changing this was 207.188.29.244. So out of curiosity we did a little whois on that IP address and whose name do we see popping up. Well none other than Real Networks. Seriously guys, if you are going to try to add anonymous FUD to wikipedia articles you might want to do it from outside your own network….

    Anyway, I removed it now, but it is still viewable in the Wikipedia history of course.

    More important than the BBC

    So the cast and crew of Syntax Era is filming outside today and will be filming a bit inside our office either today or tomorrow. The funny part I noticed though is that if you Google for Syntax Era, myprevious blog entry on Syntax Era is ranked higher than the official BBC page for the show. I guess that means I am more important in this new Internet era than the BBC is ;)

    Transmageddon
    Thought I should mention that I got remuxing working in git master of Transmageddon. This means that for supported formats I will be able to preserve either or both of the original audio and video stream when converting to another container format. Still needs a lot of cleaning up before I release, but all the hard stuff is done.

    All hail the windmill tilters

    Been growing ever more tired of the posts about RMS and his talk at GCDS. I didn’t agree with his conclusions on the technical/legal subjects covered and the whole emacs/st.igutius thing is becoming a bore, but I suspect more than a little that the current outpouring over his alleged sexism is more about people finally finding a good meme to use to latch out against someone they don’t like and disagree strongly with, rather than a sudden realization that the St. Ignutius routine he has been doing for the last 15 years is overtly sexist. One could certainly argue that there was a few passages in there that should be altered, but I am equally sure that if it had been someone else, most people ranting currently would have been willing to write it off on the goodwill account.

    On that topic I think the whole issue of sexism in the community is somewhat of a joke. It basically appeared on the stage after the following steps was taken.
    Step 1: The lack of female participation was identified as a problem.
    Step 2: People wanted to address the problem
    Step 3: The following algorithm was used to determine the source of the problem:

    If "well reasoned explanation can be found" is true:
        address_problem()
    else:
        print "sexism"
    

    Since then well meaning people of the community has followed in the footsteps of another well meaning fool and been tilting at the windmills.

    So please continue fighting against the evils you see in the world, but be aware that crucifying RMS is probably not the solution.

    And before someone starts shouting at me for not realizing that sexism do exist in the open source world, please save yourself the energy. I am sure it exist, along with racism, anti-semitism, bigotry, general intolerance, gay and lesbian hating, supremacism, communism or whatever evil you want to come up with. I just don’t buy into using them as the default fallback whenever the reason for something needs to be explained.