The obscure world of spam

After updating to Fedora Core 11 I noticed a new feature, the automatic font download system. Essentially it works like the automatic codec download system we have in GStreamer, but for fonts.

So judging by how often the font download box pops up the spam I am getting these days seems to be mostly in 3 languages Coptic, Syriac and N’Go :) I have to assume the spams are using random character sets to confuse spam filters, as I doubt that for instance either the ancient egyptians or their Coptic descendants of today are a big enough demographic for the spammers of the world :)

AMR support in GStreamer

Some time ago I put out a request for someone to pull the AMR code in Android out and turn it into GStreamer plugins. Well Iago Toral Quiroga did exactly that and thus we now got support for encoding and decoding AMR-NB in GStreamer, combined with support for decoding AMR-WB. This turned out to be an indirect team effort as the current code is a combination of the original Android code, combined with some API glue code developed by Andres Mejia and Martin Storsjö, combined with the old AMR plugins in GStreamer which was meant to be used with some non-distributable reference code. These 3 code bases Iago massaged together into something pliable. The current plan is to merge the patch once bad and ugly unfreeze and we finally got some decent AMR plugins for GStreamer. A big thanks to Iago and everyone else involved.

This effort also fit in well with a bug hunt I have been on for a while to figure out why Transmageddon was not able to create files my phone could play back. After having spent a lot of time expanding on the transcoding engine in transmageddon and testing every possible variation I could come up with, it was finally Mark Nauwelaerts here at Collabora Multimedia who came to my rescue with this patch. Also that getting merged after the freeze.

Also been testing the ASF muxer that Thiago Sousa Santos is working on as part of this years Summer of Code. It is coming along very nicely, with WMA2 and WMV2 muxing working. Hopefully when I do my new Transmageddon release before heading down to Gran Canaria I can include ASF support too. Already got a nice batch of features in git master with multipass encoding, a lot of bugfixing to the profile support, h263 and video flipping. So with the efforts mentioned above I should also be able to add AMR-NB and ASF/Windows Media support to the mix too. I also hope it is a long time until the next time I need to think about stuff like pixel aspect ratio versus display aspect ratio :)

I still need an icon for Transmageddon if someone is up for the task.

Google, the LGPL and software patents

LWN got a really interesting article discussing how Google have included H264 and AAC support in their Chrome browser using ffmpeg and the legal discussion that has come from that. It seems Chris DiBona and the Google lawyers have decided they can work around the LGPL by licensing patents for the ‘application’ instead of for the library implementing the functionality in question. Of course most of us would think that if you ship a library as part of your application, it is a part of your application, but Chris DiBona seems to feel that he licensed the H264 codec for use with the bookmarks list of Chrome and not the media engine :)

More seriously though DiBona tries to weasel out of the situation by claiming that the language of the LGPL saying ‘For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. ‘ only applies if there is a specific language in the patent license hindering re-distribution of the code. He even manages to refer to the fact that the FSF made the language on this subject even clearer in the LGPLv3 as proof that his reading is correct. While at the same time claiming that what the FSF thinks about these issues is irrelevant.

Well I guess Chris is right about Google taking their responsibilities very seriously, at least as long as they say what he wants them to say :) Can’t help but feel that Google somewhere along the line went from ‘do no evil’ to ‘we are google, hence no evil can have been done’ which while sounding similar actually are very different.

Funniest part though is that another part of Google, Android, seems to think its not even legally fine to ship a LGPL media framework combined with Apache licensed codecs with their stack. But I guess the Android and Chrome departments have different lawyers, so if we are lucky maybe the Android department ends up suing the Chrome department ;) Or maybe Chris DiBona wakes up and realize he could resolve this issue quickly by combining the Apache licensed H264 implementation in Android with his ffmpeg stack and thus resolve this issue.

Pitivi release getting positive feedback

Seen quite a few very positive twitter feeds since Edward Hervey announced the 0.13.0.2 pre-release of the PiTiVi video editor. Also saw this blog entry by Bryan Lunduke praising our latest efforts around PiTiVi. So all Pitivi sceptics out there, this is the time to give PiTiVi another look!

Transmageddon
Nathan Willis wrote a nice article on lwn.net covering Transmageddon and Arista. If you are not a lwn.net subscriber you should seriously considering becoming so, or you just have to wait until the article becomes generally available next week.

To avoid scaring to many people away I also I finally updated the Transmageddon website today, so instead of looking like a 5 minute website it now looks like I at least gave it about an hour :)

New transmageddon release

Did a new Transmageddon release today. This version includes the first stab at the device profiles support that I have been working on in collaboration with Daniel of Arista transcoder fame. While I think most of the profiles in there work many of them are probably not optimal as I haven’t gotten around to testing them as much as I wanted. Getting the Nokia 770 profile going basically sucked up all time I had for Transmageddon over the last weeks.

Be also aware that the presets might not work as expected as they rely on still unrelased changes to GStreamer. So while I put in checks in the code for this, it means that if it doesn’t find the GStreamer preset support, it will just go with encoder defaults, which will not work for some devices, most notably the iPod.

There are a couple of features on my immediate TODO list atm, which include multi pass encoding and remuxing, in addition to cleaning up the website, but things are looking a little hectic for a while, so I figured I get this release out as it might be quite some time until I get around to sorting out those issues.

I also got a Bugzilla entry set up for Transmageddon now, so feel free to file bugs and enhancement requests. But please be aware of the bleeding edge development goals of Transmageddon, which do mean your out-of-the-box GStreamer will probably not give you access to all the full featureset of Transmageddon.

So enjoy Transmageddon 0.10 :)

Help for Transmageddon

So I spent a lot of time this weekend hacking on Transmageddon. The result is that I got most of the needed code in place to do use profiles to transcode towards a specific device. The current code will scale down your video for instance, or resample towards a specific samplerate as specified in the profile. Got a screenshot of the current git here. Will be some time before a release though as there are lot of little bugs and issues that needs to be fixed and I depend heavily on GStreamer git currently for these profiles to work.

That said I have encountered two issues I am hoping someone in the community would be interested in tackling. The first is that in order to create files viewable on most phones out there I need AMR support. There current AMR plugin i -bad is a ugly fudge requiring you to download a tarball from the standards website and unzip it into the plugins structure. There is no need for this anymore as there is Apache licensed implementations of encoders and decoders for both AMR WB and AMR NB in Android. So if someone a bit familiar with C/C++ would be interested in trying to rip out these two libraries and turn them into GStreamer plugins I would be very grateful.

The code can be grabbed by doing:
git clone git://android.git.kernel.org/platform/external/opencore.git

The second task I would love some assistance with is creating an icon for Transmageddon. What I currently have in mind is a 3 window film strip, with the first windows being red, the second green and the last one blue. The green window part of the strip should be twisted around though so the blue window seen is on the ‘back’ of the film strip. But any nice looking icon would be welcome.

I plan on having some Transmageddon t-shirts made for GUADEC, so if anyone helps me out with either of these two tasks let me know your t-shirt size and I either bring the t-shirt to give you at GUADEC or if you are not attending I will send it in the post.

Interview about PiTiVi video editor

Managed to get the long promised interview with Edward Hervey about PiTiVi online today. Edward talks about some of the great work they have been doing recently and the incredible improvements the next release (happening this Month :) will have. I think anyone who have tried PiTiVi in the past who tries this upcoming release will be amazed of the great strides forward it is making. Hopefully once my Python coding skills improve enough from doing Transmageddon I could start contributing to PiTiVi too. If you are not afraid of grabbing code from a git repository I recommend that you grab git master of Pitivi and give it a go and come to #pitivi on irc.freenode.net, could be a good way to help Edward and the team nail down the last bugs before the release.

Transmageddon
I am continuing to work on Transmageddon. I have also gotten some great patches from Steven Walter, which essentially takes my gazillion lines of code and turns them into 4 line functions :)
I managed to integrate the profile reading code from Arista, so that as we continue to evolve the XML format for our device profiles I will be able to stresstest the changes. The code in git currently will let you choose a profile and set your container format and codecs based on it. Next steps is enabling video scaling and also setting preset values onto the encoders themselves. Once that is done I do a new release before starting to look at multipass encoding and remuxing.

Another small change is that I started adding Rank values to our encoders and muxers and is now checking for those ranks in Transmageddon. This means I don’t have to code in workarounds for specific plugins anymore, instead I just have general code checking for plugin ranks. Probably need add some code that ignores plugins with no rank though to avoid risking the code picking broken plugins like the ffmpeg Ogg muxer instead of using the automatic codec install code to grab the working muxer. Enabling such code would need to wait quite a bit though as all released GStreamer plugins have no ranks currently for encoders and muxers, so in practice it will be 6-9 Months at least before even the majority of users will have the versions with the rank set.

Transmageddon and Arista

So I’ve been spending some time talking with Daniel G. Taylor of Arista transcoder fame and I think there is a good chance we will be collaborating quite a bit going forward. Neither Transmageddon or Arista will be going away as separate projects, but we will collaborate on many features and the focus of Transmageddon will change slightly.

Daniel plans on making sure Arista works on latest Ubuntu releases, which means Arista will be the transcoder which actually works with what people have out there. Transmageddon will on the other hand
track GStreamer git master quit closely as I try out and help mature various GStreamer features. Of course as soon as these features matures and starts being shipped in the GStreamer versions shipped by distributions then Arista will start using them too.

There are a range of issues where I think this model will suit all our needs fine. First of all I worked quite a bit on a plugins based on caps system in Transmageddon 0.7 instead of using specific element names. Daniel wants this for Arista too, but until we get things like bug 580005 in GStreamer resolved and GStreamer versions with this change shipped by distros then of course it will break functionality to use the plugins from caps system.
So I will track GStreamer git and use whatever we have there, and Daniel will look to see when the distros ship this stuff to decide when Arista picks it up.

Another feature where this will come into play is presets. Daniel and I will work together on the presets stuff, figuring out what needs to work on the GStreamer level using the GStreamer element level preset system and what will go into a higher level device definition file, based on the XML files Daniel currently ships with Arista.

Arista has also been switched over to the LGPL(v21) starting from todays Arista 0.9 release to ease code flowing back and forth between Transmageddon (which is already LGPL) and Arista, and at the same time we hope to lay the foundation for a python transcoding library that can be used by stuff like Conduit. By defining this API hopefully we can also help establish what would be a useful C API for a GStreamer encoding/transcoding API.

Btw, I released 0.8 of to Transmageddon today, mostly containing some bugfixes. MPEG4/Divx5 encoding should work again for instance and xvid support is also added.

Transmageddon 0.7 released

I am very happy to announce the release of Transmageddon 0.7. This release of my simple to use video converter got some major new features. First of all it now sports full i18n support, thanks to a patch from Łukasz Jernaś. We only got Polish and Norwegian translations so far, but hopefully once I move Transmageddon into GNOME git, interested translators will find the infrastructure in place for easily adding more.

The second major feature in this release is that I did away with hardcoded element names. Instead I query GStreamer for possible plugins which I can then access using the GStreamer caps format. For instance to get mp3, instead of hardcoding the ‘lame’ element, I am now able to ask for a encoder doing ‘audio/mpeg,mpegversion=1,layer=3’ and GStreamer will provide me with any element I might have which supports creating mp3 files. The code for this is all in codecfinder.py.

This also let me enable another major feature, which is hooking into the automatic codec download system for GStreamer, now available in most major distros.
transmageddon-missing-plugins

As you might notice in the screenshot, Transmageddon now also displays the height and width of the video you are transcoding. Apart from the minor informational value this is not very useful atm, but it was a prerequisite for me to be able to add videoscaling support, which is my next step.

I also came across another python/gstreamer transcoder the other day, Arista. It got a pretty nice feature set already, and both application and website is a bit more polished in terms of looks than Transmageddon :) One thing I want to try to share with Arista is the XML device profile format, so that we can start building a database of profiles that can be shared between a lot of different applications.

Anyway, I hope people will try out this version of Transmageddon and let me know what you think. I am especially curious to hear how the automatic codec downloading stuff works for people.

Coherence nominated
Finally I would like to congratulate Frank his Coherence DLNA framework for being nominated to the 2009 Free Software Trophy in the multimedia category. Best of luck for the start of June when the winner is announced.

Entropy Wave launched
David Schleef who most of you probably know as a long time GStreamer contributor and the lead developer behind the Schrodinger Dirac library got the website up for his new company, Entropy Wave. David aims at offering various codecs and services for GStreamer and multimedia in general through Entropy Wave. At Collabora Multimedia we are looking forward to working with David and his company going forward. Lets just hope we can manage to get our own new website public soon :)

Transmageddon

In case people are wondering if I have stopped working on Transmageddon, I haven’t. It is just that I suddenly reached a point where I couldn’t google and look at other peoples code to do what I wanted so I have been stuck in a mode for some time now with writing small python applications to test various APIs and try to figure out who I can avoid harcoding the element names of my muxers and encoders. That combined with being in San Fransisco for a while to attend the CE Linux and Linux Foundation Collaboration summits has left progress slow.

Had a bit of a breakthrough today though when I finally managed to get an element factory to report back to me the GStreamer equivalent of a mimetype it supported as output, so hopefully I can sort out this snag and continue forward again at a brisker pace.

I am also still working on getting more GStreamer related interviews published on gnomedesktop, but the two people I am trying to interview currently seem to have engaged in a competition to see who will be the slowest to get back to me :)