[Most Recent Entries]
Below are the 20 most recent journal entries recorded in
[ << Previous 20 ]
[ << Previous 20 ]
|Friday, January 17th, 2014|
|DVD playback in GStreamer 1.0
Some time in 2012, the GStreamer team was busy working toward the GStreamer 1.0 major release. Along the way, I did my part and ported the DVD playback components from 0.10. DVD is a pretty complex playback scenario (let’s not talk about Blu-ray)
I gave a talk about it at the GStreamer conference way back in 2010 – video here. Apart from the content of that talk, the thing I liked most was that I used Totem as my presentation tool
With all the nice changes that GStreamer 1.0 brought, DVD playback worked better than ever. I was able to delete a bunch of hacks and workarounds from the 0.10 days. There have been some bugs, but mostly minor things. Recently though, I became aware of a whole class of DVDs that didn’t work for a very silly reason. The symptom was that particular discs would error out at the start with a cryptic “The stream is in the wrong format” message.
It turns out that these are DVDs that begin with a piece of video that has no sound.
Sometimes, that’s implemented on a disc as a video track with accompanying silence, but in the case that was broken the DVDs have no audio track for that initial section at all. For a normal file, GStreamer would handle that by not creating any audio decoder chain or audio sink output element and just decode and play video. For DVD though, there are very few discs that are entirely without audio – so we’re going to need the audio decoder chain sooner or later. There’s no point creating and destroying when the audio track appears and disappears.
Accordingly, we create an audio output pad, and GStreamer plugs in a suitable audio output sink, and then nothing happens because the pipeline can’t get to the Playing state – the pipeline is stuck in the Paused state. Before a pipeline can start playing, it has to progress through Ready and Paused and then to Playing state. The key to getting from Paused to Playing is that each output element (video sink and audio sink) in our case, has to receive some data and be ready to output it. A process called Pre-roll. Pre-rolling the pipeline avoids stuttering at the start, because otherwise the decoders would have to race to try and deliver something in time for it to get on screen.
With no audio track, there’s no actual audio packets to deliver, and the audio sink can’t Pre-roll. The solution in GStreamer 1.0 is a GAP event, sent to indicate that there is a space in the data, and elements should do whatever they need to to skip or fill it. In the audio sink’s case it should handle it by considering itself Pre-rolled and allowing the pipeline to go to Playing, starting the ring buffer and the audio clock – from which the rest of the pipeline will be timed.
Everything up to that point was working OK – the sink received the GAP event… and then errored out. It expects to be told what format the audio samples it’s receiving are so it knows how to fill in the gap… when there’s no audio track and no audio data, it was never being told.
In the end, the fix was to make the dummy place-holder audio decoder choose an audio sample format if it gets a GAP event and hasn’t received any data yet – any format, it doesn’t really matter as long as it’s reasonable. It’ll be discarded and a new format selected and propagated when some audio data really is encountered later in playback.
That fix is #c24a12 – later fixed up a bit by thiagoss to add the ‘sensible’ part to format selection. The initial commit liked to choose a samplerate of 1Hz
If you have any further bugs in your GStreamer DVD playback, please let us know!
|Wednesday, October 16th, 2013|
|Proof of life – A New Adventure!
Hi world! It’s been several years since I used this blog, and there’s been a lot of things happen to us since then. I don’t even live on the same continent as I did.
More on that in a future post. Today, I have an announcement to make – a new Open Source company! Together with fellow GStreamer hackers Tim-Philipp Müller and Sebastian Dröge, I have founded a new company: Centricular Ltd.
From 2007 until July, I was working at Oracle on Sun Ray thin client firmware. Oracle shut down the project in July, and my job along with it – opening up this excellent opportunity to try something I’ve wanted for a while and start a business, while getting back to Free Software full time.
Our website has more information about the Open Source technologies and services we plan to offer. This list is not complete and we will try to broaden it over time, so if you have anything interesting that is not listed there but you think we can help with, get in touch
As Centricular’s first official contribution to the software pool, here’s my Raspberry Pi Camera GStreamer module. It wraps code from Raspivid to allow direct capture from the official camera module and hardware encoding to H.264 in a GStreamer pipeline – without the shell pipe and fdsrc hack people have been using to date. Take a look at the README for more information.
Sebastian, Tim and I will be at the GStreamer Conference in Edinburgh next week.
|Wednesday, November 11th, 2009|
|Monday, September 21st, 2009|
|OSSbarcamp 2 - GNOME 3.0 talk
I gave a talk at the second Dublin OSSbarcamp
yesterday. My goal was to provide some insight into the goals for GNOME 3.0 for people who didn't attend GCDS
Actually, the credit for the entire talk goes to Vincent
and friends, who gave the GNOME 3.0 overview during the GUADEC opening at GCDS
and to Owen
for his GNOME Shell talk
. I stole content from their slides shamelessly.
The slides are available in ODP
form, or as a PDF
|Wednesday, July 8th, 2009|
|Towards GStreamer 1.0 talk
I gave my talk titled "Towards GStreamer 1.0" at the Gran Canaria Desktop Summit
on Sunday. The slides are available here
My intention with the talk was to present some of the history and development of the GStreamer project as a means to look at where we might go next. I talked briefly about the origins of the project, its growth, and some of my personal highlights from the work we've done in the last year. To prepare the talk, I extracted some simple statistics from our commit history. In those, it's easy to see both the general growth of the project, in terms of development energy/speed, as well as the increase in the number of contributors. It's also possible to see the large hike in productivity that switching to Git in January has provided us.
The second part of the talk was discussing some of the pros and cons around considering whether to embark on a new major GStreamer release cycle leading up to a 1.0 release. We've successfully maintained the 0.10 GStreamer release series with backwards-compatible ABI and API (with some minor glitches) for 3.5 years now, and been very successful at adding features and improving the framework while doing so.
After 3.5 years of stable development, it's clear to me that when we made GStreamer 0.10, it really ought to have been 1.0. Nevertheless, there are some parts of GStreamer 0.10 that we're collectively not entirely happy with and would like to fix, but can't without breaking backwards compatibility - so I think that even if we had made 0.10 at that point, I'd want to be doing 1.2 by now.
Some examples of things that are hard to do in 0.10:
- Replace ugly or hard to use API
- ABI mistakes such as structure members that should be private having been accidentally exposed in some release.
- Running out of padding members in public structures, preventing further expansion
- Deprecated API (and associated dead code paths) we'd like to remove
There are also some enhancements that fall into a more marginal category, in that they are technically possible to achieve in incremental steps during the 0.10 cycle, but are made more difficult by the need to preserve backwards compatibility. These include things like adding per-buffer metadata to buffers (for extensible timestamping/timecode information, pan & scan regions and others), variable strides in video buffers and creating/using more base classes for common element types.
In the cons category are considerations like the obvious migration pain that breaking ABI will cause our applications, and the opportunity cost of starting a new development cycle. The migration cost is mitigated somewhat by the ability to have parallel installations of GStreamer. GStreamer 0.10 applications will be able to coexist with GStreamer 1.0 applications.
The opportunity cost is a bit harder to ignore. When making the 0.9 development series, we found that the existing 0.8 branch became essentially unmaintained for 1.5 years, which is a phenomenon we'd all like to avoid with a new release series. I think that's possible to achieve this time around, because I expect a much smaller scope of change between 0.10 and 1.0. Apart from the few exceptions above, GStreamer 0.10 has turned out really well, and has become a great framework being used in all sorts of exciting ways that doesn't need large changes.
Weighing up the pros and cons, it's my opinion that it's worth making GStreamer 1.0. With that in mind, I made the following proposal at the end of my talk:
- We should create a shared Git playground and invite people to use it for experimental API/ABI branches
- Merge from the 0.10 master regularly into the playground regularly, and rebase/fix experimental branches
- Keep developing most things in 0.10, relying on the regular merges to get them into the playground
- After accumulating enough interesting features, pull the experimental branches together as a 0.11 branch and make some released
- Target GStreamer 1.0 to come out in time for GNOME 3.0 in March 2010
This approach wasn't really possible the last time around when everything was stored in CVS - it's having a fast revision control system with easy merging and branch management that will allow it.GStreamer Summit
On Thursday, we're having a GStreamer summit in one of the rooms at the university. We'll be discussing my proposal above, as well as talking about some of the problems people have with 0.10, and what they'd like to see in 1.0. If we can, I'd like to draw up a list of features and changes that define GStreamer 1.0 that we can start working towards.
Please come along if you'd like to help us push GStreamer forward to the next level. You'll need to turn up at the university GCDS venue and then figure out on your own which room we're in. We've been told there is one organised, but not where - so we'll all be in the same boat.
The summit starts at 11am.
|Friday, April 3rd, 2009|
|New York trip, DVD stuff
We're leaving tomorrow afternoon for 11 days holiday in New York and Washington D.C. While we're there, I'm hoping to catch up with Luis and Krissa
and Thom May
. It's our first trip to either city, so we're really excited - there's a lot of fun, unique stuff to do in both places and we're looking forward to trying to do all of it in our short visit.
On the GStreamer front, I just pushed a bunch of commits I've been working on for the past few weeks upstream into Totem, gst-plugins-base and gst-plugins-bad. Between them they fix a few DVD issues like multiangle support and playback in playbin2. The biggest visible feature though is the API that allowed me to (finally!) hook up the DVD menu items in Totem's UI. Now the various 'DVD menu', 'Title Menu' etc menu items work, as well as switching angles in multiangle titles, and it provides the nice little 'cursor switches to a hand when over a clickable button' behaviour.
I actually had it all ready yesterday, but people told me April 1 was the wrong day to announce any big improvements in totem-gstreamer DVD support :-)
|Saturday, March 28th, 2009|
|GStreamer talk at OSSbarcamp tomorrow
If you're in Dublin tomorrow (Saturday 28th March), and you're interested in Open Source, feel free to come along to the OSSbarcamp at DIT Kevin St and enjoy some of the (completely free!) talks and demos. I'll be presenting an introduction to the GStreamer multimedia framework in the afternoon.
Other talks I'll be attending include my wife Jaime's
talk on using Git, Luis'
"Being Creative With Free Software", and Stuart's
Details of times and the talk schedule are at http://www.ossbarcamp.com/
|The first Thusnelda theora encoder release
I'd like to offer congratulations to all the Xiph folks, but especially Monty, Ralph and Tim on the theora-1.1alpha1 release
from the Thusnelda encoder branch.
To try it out, I transcoded a short (1m40s) 720p trailer video from H.264+AAC to Theora+Vorbis, at libtheora quality setting of 32, using the 1.0 theora encoder, and again with 1.1. It's not a very rigorous experiment, but enlightening nonetheless.
Both encoders produced output of comparable visual quality. With the 1.0 theora encoder the output file was 24383125 bytes. Of that, the video portion is about 1.835 Mbit/s. With libtheora 1.1alpha1, the same quality is reached with only 19088009 bytes (video at 1.416 Mbit/s)!
That's a pretty easy 20-ish% compression improvement for no loss in quality. As an added bonus, the transcoding time dropped from 2m10s to 1m52s. That's not quite real-time for this frame size in either case, but an impressive step closer.
There's some degradation from the visual quality of the original file. That's to be expected when taking a 5.61 Mbit/s video stream down to less than a third of the original size - even on the same codec.
For comparison, here's a random frame from the output of each encoder, along with the same frame from the original file:
[caption id="attachment_81" align="alignnone" width="300" caption="screenshot of the original H.264 frame"]
[caption id="attachment_79" align="alignnone" width="300" caption="screenshot from the theora-1.0 encoding"]
[caption id="attachment_80" align="alignnone" width="300" caption="screenshot from the theora-1.1 encode"]
Sweeeet. Well done, guys!
|Wednesday, March 25th, 2009|
|My birthday is over at last!
Nearly 4 months after the fact, my birthday is finally complete - my "Netherlands and Architecture"
"Open Source" coin finally arrived from the Royal Dutch Mint:
[caption id="attachment_75" align="alignnone" width="300" caption="Royal Dutch Mint coin - Netherlands and Architecture"]
The delay was caused by transmission errors introduced somewhere while communicating our delivery address.Obligatory GStreamer bit
The other nice thing from today is this script Luis
and I put together to convert any supported video into a format suitable for playback on his new BlackBerry Storm after he had trouble with encoding errors trying to use FFmpeg for the task.
It's a simple shell script that uses GStreamer's gst-launch utility to do 2 pass conversion to H.264 and AAC in an MPEG-4 container. You can find it here
if you're interested.
As an added bonus, Luis reports that the GStreamer conversion is noticeably faster than the erroneous FFmpeg one.
|Thursday, February 5th, 2009|
|Sunday, November 30th, 2008|
|A new trip
We were supposed to be in Thailand by now, on a two week holiday. Unfortunately, that's been thoroughly scuppered by protests
closing both Bangkok airports. It's a big disappointment, because my parents and several brothers were also due to fly in, and we were really looking forward to spending time with them all.
Fortunately though, KLM gave us a full refund on our long haul flights, and the rest of the things we'd booked were fully cancellable, so we've hardly lost any money. We still have 2 weeks of annual leave stretched in front of us though, so we spent yesterday rearranging plans.
Instead of a trip to Bangkok and Krabi, we're now doing a trip to Cairo, Hurghada and Paris starting tomorrow. Pyramids and sunshine, here we come!
|Tuesday, November 4th, 2008|
|Weekend in London
We took a trip to London this weekend. It started with some cheap BA tickets and a desire to see the musical Wicked
- which was wonderfully done.
We were introduced to Wicked after reading Gregory Macguire's book of the same name
. I really enjoyed the idea of taking a story that everyone knows inside out (The Wizard of Oz) and creating an entire other story within and around it. I'm obviously not alone, since both the book, the sequel and the musical have been smash hits all over the world.
While we were in London, we took the opportunity to visit Zaheer
and Alia and see their lovely new-to-us house. We also did some unsuccessful hunting for a copy of Starfarers of Catan
On Sunday, since the skies were clear, we decided to brave the queues and went on the London Eye
. Afterward, we visited Madame Tussauds
, which was fun.
I pity the foo' that's never visited a Madame Tussauds.
On an unrelated note from the Serendipitous Amusements department, a curious moment as I was in Hamburg for work a few weeks ago. One night, as we were looking for a restaurant in town we tried to print a map from Google maps. When I got around to the printer, it was blocked with a paper jam from earlier in the day. After unclogging the paper, the printer proceeded to divest itself of other peoples' spooled jobs.
The first print job seemed to be a printout of someone's computer magazine subscription, and the very first page that emerged was this one:
[caption id="attachment_65" align="alignnone" width="212" caption="Klocwork code analysis ad"]
As I waited for my page, I was reading the Klocwork advertisement, and then was amused to note that amongst the source code at the bottom, I could discern lines that are clearly from GStreamer
I recognise some of the lines from other open source projects, so hopefully someone else is as amused as I was to spot code from something they've contributed to :)
|Thursday, September 4th, 2008|
|Recipe for awesome
2 best friends
5 days in Edinburgh in August
1 Edinburgh Fringe Festival show guide
Tickets to as many shows as you can afford
A good list of free shows around the place, to fill in the gaps.
I spent 5 days of the week before last in Edinburgh having a complete blast at the fringe festival with Jaime and 2 of my friends from high school - James and Miki. I really can't recommend the fringe festival highly enough - if you haven't been, put it on your list of things to do before you die. I want to go back next year for longer, if I can just figure out how.
We saw a bunch of awesome shows, and some hilariously bad stuff that I still enjoyed immensely. I think the pot luck aspect of picking a few shows at random is an important part of the fun. I've been trying to choose a Pick of the Fest since we got back, but failed. In the end, I'm calling it a draw between 3 shows: The Expert at the Card Table, Dead Cat Bounce Late Night Radio and Sammy J in the Forest of Dreams. If you get a chance to see any of them somewhere else in the world, jump at it!
The Expert at the Card Table is a one man show by Guy Hollingworth
. Guy tells a compelling and wonderfully choreographed story of the origin of card tricks, while demonstrating a range of tricks and techniques.Dead Cat Bounce
, Late Night Radio is a show done by 4 guys out of Trinity College recreating a golden-age radio show, complete with foley, songs and a bunch of great jokes. Impressive stuff from some quite young guys that I'm keen to catch again elsewhere.Sammy J
is an Australian comedian that I hadn't seen before. We picked the show purely on the basis of it mentioning puppets in the description. A fantastic 2-man show (Sammy J, and the puppeteer) with some good laughs. It's fun to see an adult show featuring puppets.
We were really lucky with our accomodation choice. Jaime spent hours compiling a list of hotels and hostel options for us to choose. By the time we actually went to pick one 3 days later, all those options had booked out or doubled in price! Luckily, a new hostel had just opened up, and it worked out really well - University dorm accomodation vacated by the students for the summer break, right in the middle of town, at a great price.
Wednesday: Arrived in Edinburgh. Found hostel. Picked up a nice stack of tickets to shows from the ticket office. Hung out in the hostel until James & Miki arrived, and then kicked off our festival experience with Frank Woodley
's one man show Possessed, which was hilarious despite (because of) him dropping out of character and ad-libbing quite a bit. In the evening, the La Clique circus in the lovely Spiegeltent venue. La Clique was a great show, as we'd expected from the reviews.
Thursday: Ate a hearty Scottish breakfast at a local pub. Explored the city a bit, and went to some free shows at the Counting House. Marcel Lucont, Ginger & Black and Dean Scurry were the best of. Met up with Miki's friends for dinner, and then went to a random choice: "Meli Melo 2", which turned out to be 4 french men parodying about 50 different dancing styles in a dizzying array of costumes. Afterward, met some of James' work colleagues (in town for the night) for drinks, and then braved the 2am Late-Night standup - back at the Counting House. The atmosphere was strained - only about 10 of us in the room, and 6 of those drunk and abusive. Headed back to the hostel about 3am.
Friday: Slept in 'til midday, and then off to Shakespeare in the park - The Taming of the Shrew, performed by the Pantaloons
. Some more exploring of the city and enjoying the myriad of street performances. We took another punt on a random show and bought half price tickets to Happyland. It turned out to be an enthusiastic musical with a somewhat disappointing storyline, but still worth the 4£ to see :) Jaime arrived in the night, just in time to go to The Best Of The Fest and see Phil Nichol
, Neil Delamere
, Matt Kirshen
(who Australians will know) and Gamarjobat
make us laugh ourselves silly for 2 hours.
Afterward, we wandered back up the hill toward the hostel, and I tried unsuccessfully to capture the lovely effect of the moon through the clouds without a tripod.
</a>Saturday: Started quite late with Rich Hall
's "50 cent words" - reading pieces from some of his books and short stories. It got a few lukewarm reviews, but I enjoyed listening to him vocalise his writing. After, Clive James In Conversation
, interviewing Armando Iannucci
about his life, British television, the evolution of comedy on TV and some random questions from the audience (Organic or GM, anyone?). A really quick dinner, and then Jaime and I went to the last night of the Military Tattoo at the castle.
After that, The Axis of Awesome (quite good Australian musical comedy trio) and Dead Cat Bounce Late Night Radio - one of my Best of Show picks :) Rather than head straight back to bed at 1am, we decided to try the Late Night Stand-up again, which turned out to be a good choice. The room was a lot livelier (and therefore funnier) than Thursday night, with a mostly-different set of comedians and jokes :)
Sunday: Last day. Miki got up early and left us all sleeping to catch her flight back to Sweden. Jaime, James and I checked out about 10am, and went to Back To The Future: The Pantomime, which was thoroughly pantomimical and had plenty of Back To The Future as promised, but I still can't decide if I liked it or not. James had to leave us at that point too, which was a bit of a shame because 2 of the best shows were yet to come.
To be honest, we originally picked The Expert At The Card Table on the basis that it was directed by Neil Patrick Harris, who we both find hilarious (Dr Horrible, anyone?). I'm really glad we did, because it turns out that not only is he a really good director, but Guy Hollingworth is a great actor and one of a select group of people on the planet who could pull this show off. The drama was built really well, and the card tricks blended perfectly to create a really nice piece of magical theatre.
After that, it was off to our final show - Sammy J in the Forest of Dreams, which I mentioned above. A great way to finish our trip to the Edinburgh Fringe.
I can't wait for next year :) Current Mood: cheerful
|Thursday, July 17th, 2008|
|Wednesday, July 16th, 2008|
|10 days in Turkey
We're back at home after an awesome time in Istanbul, in which we attended GUADEC, did some sight-seeing (not enough), hung out with a bunch of really fun awesome people, and attended a great conference about what people are hacking on and planning for GNOME.Friday
Arrived from Dublin around 11pm and got to the Golden Horn Sirkeci. Rang Wim & Christian
and set one tone for the week by going out for beers
Woke up late. Hungover for some reason. Went out and explored the spice market
and Grand Bazaar
. On the way back to the hotel ran into Collabora people sitting on the terrace of their hotel.
After a beer there, we all went searching for dinner and discovered the cushions on the street next to the Golden Horn, conveniently already populated with several other attendees, including Luis, Krissa and Phillip Van Hoof. Enjoyed dinner, beer & nargileh
until after midnight.Sunday
Up early. Had breakfast at the hotel, and then off to the impromptu GStreamer summit from last blog post. Jaime went exploring
while we chatted. We were short by a few key GStreamer hackers who either couldn't make it to Istanbul or missed my poor excuse for an announcement, but had a nice solid representation of core hackers nevertheless. Quick summary:
- Discussed that we should move GStreamer out of CVS, and our best overall choice is Git. FDO already has the infrastructure, we have people who know how to use it and will be there to help those of us who don't and, most importantly, Tim & Edward are willing to do the migration work.
- People weren't interested in doing a 0.12 branch along the lines of 0.8->0.10 where everyone stops hacking on 0.10 for 12 months while the new version is produced. Instead, we should try a process where (after we move to Git and can do this sort of thing easily) people create their own experimental branches. After, when we have enough interesting experimental branches we try and bring them together and call it 0.12.
- Saw and did interesting demos of in progress hacking: Edward's HDV camera support. Wim's basetransform rework. My DVD navigation pieces.
After, went hunting food and stopped at a place where, as soon as they saw us looking at the menu, about 10 nice policemen
jumped up from the tables they were sitting at and took their food inside so we could sit outside.
After lunch, Andy
declared "Let's go to Asia!", and we caught a ferry
. Saw police in riot gear and tanks, then discovered the protest
they appeared to be prepared for. Had beer, caught another ferry and reclined in the Cushion Street again for more food, beer and nargileh.Monday
Up early and off to see Topkapi palace. I found myself constantly assessing features of the palace
for ledges, handholds and other climbing points. Clearly played too much PoP.
After, caught the tram to the conference venue. We had a little trouble finding the place, but not as much as some
. Met up with some more people, and went to Ghee's printing BOF and Marina's Online Desktop widget talk. Went for dinner at 360 restaurant
before joining the opening drinks at Reddim night club. Didn't stay long after the price of beer changed and the temperature went up.Tuesday
Had Turkish icecream for breakfast, then I went to the conference while Jaime did some more sightseeing. Enjoyed the Banshee BOF - Banshee is cool. Inspired to try using Banshee as my primary media player for a while.
Ran into Marc-Andre and Meriam
on the way to dinner and they joined Wingo, Zeeshan and us for dinner and chilling
followed by more chilling under the Galata bridge with others
Straight to university in the morning. Went to the conference opening, then Travis' Soylent talk, the Clutter Guts talk, lunch with Lennart and kfish
. As always after a clutter talk, felt inspired to try building a video app in clutter.
After lunch, Leisa's great keynote on user experience design. Inspired to reimplement Silverback
by gluing Istanbul
Elisa talk was interesting, and we talked with him about why Elisa doesn't work for our video-watching workflow. It still feels like Clutter and Pigment duplicate a lot of effort, but I understand why combining is tricky.Pippin's
GEGL talk was great. I really liked his 'semantic desktop prototype' presentation tool. Inspired to hack pretty things with GEGL.
A second good keynote from Blizzard
. I want to see more of his presentations. Interesting stuff about using Firefox to influence the future of the web. Intrigued by their optimisation tools and techniques. Inspired to go optimise something. Drinks on the roof of the university with live music, followed by Cushion Bar.Thursday
Matt Webb's keynote, then Rob's Telepathy talk. I want to see features like 'Right-click->share my desktop to Joe' land in releases. Actually, I want to see 'Right-click->Frag Joe in Quake ]|[' first.
canvas talk. There are lots of people exploring paths for the 'platform for next generation UIs' thing - clutter, moonlight, webkit, mozilla. It'll be interesting to see where they converge.
After lunch, Kristian's "GTK+ State of the Union' keynote. I like their approach to GTK+ 3.0. The care it takes to preserve ABI/API while still producing new features and working around design shortcomings slows GStreamer
development down too.
Went to Colin's and then Owen's Online Desktop
talks. Glad to hear later that the APOC
guys and the Online Desktop guys had some conversations about the commonalities and differences between them.
Not sure why Alp's WebKit talk qualified as a keynote, but maybe because I already saw substantially the same talk at FOSDEM.
Fun with penis-enlargement pumps
at dinner. More fun at the Collabora boat party. I came 3rd in the icecream eating
competition. Inspired to eat icecream, forever.
After the boat party, we went out for kebabs with a crowd led by Pete and Miguel. Amusing chilli eating competition between Aaron and Jono. A good time was had by all
Went to Benjamin's Flash talk, then Bastien's update on bluetooth development. Interested in PackageKit, but worried that it has a restrictive (prescriptive?) view of what package management systems should be allowed to ask as they install things. Apparently I'm not the first
Excellent set of lightning talks after lunch, then the AGM. I liked the inspirational tone of Federico's Document-Centric-Gnome proposal, but found the paper design unconvincing. I'd like to see a prototype though :)
Google sponsored cup-o-beer-foam party had a good light show
, but I can't find a good pic of it.Saturday
Had a sleep-in and then visited the Blue Mosque and Aya Sofia before going to Alberto and Joerg's APOC talk. Also went to Alberto's talk about polishing GTK's image. Somewhat inspired to create a 'GNOME stack SDK' for Windows that'd come with GStreamer, GTK, Pango, etc in one big bundle.
After, went to the Galata tower, and then met up with Collabora guys and more to go to Asia again for dinner. Amusingly, the good restaurant from the guide book turned out to be the place we'd randomly ended up in on Sunday for drinks. Turns out the food is quite good.Sunday
Caught the plane back to Dublin. Did some good hacking on the way - integrating my recent GStreamer DVD navigation work into playbin so (e.g.) Totem can use it. Check it out:
Hoping to have it feature complete within the next 2.5 months. Current Mood: cheerful
|Friday, July 4th, 2008|
|Thursday, February 21st, 2008|
|New GStreamer Plugins and FOSDEM
I just finished uploading the releases of 3 of the big GStreamer
modules - the Good, Bad & Ugly plugins modules. These releases are really big, because all 3 haven't been released since June last year! 8 months of sweet hacking has produced some nice stuff. Among my favourite features of these releases:
- DVB support - soon to be integrated directly into Totem for TV watching from the comfort of.... whereever you're comfortably using Totem
- Vastly improved RTSP and RTP support. Sweet.
- Video4Linux 2 capture support improved - go Cheese!
- Wrappers for native QuickTime and DirectShow plugins on OS/X and Windows. Thanks, Songbird and Fluendo!
- A bunch of plugins hit the quality standard and graduated from the Bad collection to Good and Ugly. Helping to improve the plugins in the Bad collection is a great way to get involved!
- OpenGL support became sophisticated enough to warrant its own module, and gst-plugins-gl was born.
There are, of course, lots of other changes - check it out
Tomorrow evening, Jaime and I'll be landing in Belgium for FOSDEM
, which is going to be awesome. I'm a big fan of our community gatherings and getting to meet up with y'all. I was sort-of looking forward to giving a talk with some other GStreamer guys on Sunday in the GNOME/CrossDesktop devroom, but confusion over whether I said we would or not means the slot has been filled. We may still end up doing something on Saturday instead, will have to see.
We're planning on checking out Brussels during the day on Friday, and then meeting up with everyone at the pub on Friday night. If you're coming too, make sure to say hi!
|Saturday, February 2nd, 2008|
|Fun things to do with GStreamer command-lines
This is a bit of a long post, but bear with me :)
Last week, I found out that OpenSolaris has recently added the Video4Linux2 APIs, and now provides a v4l2 driver for UVC compatible video cameras. That's slightly funny, of course, because it has the word 'Linux' right there in the name. I think it's really cool to see that the OpenSolaris guys aren't suffering from NIH syndrome
about that though.
To continue, I've had my eye on the Logitech Quickcam Pro 9000
for a little while, and it happens to be a UVC camera. This seemed like a good opportunity, so I ordered one. Nice webcam - I'm really pleased with it.
After that arrived, I was playing with V4L2 on one of the machines at work, and put a couple of patches from Brian Cameron into GStreamer
's gst-plugins-good module to make our v4l2src plugin compile and work. The biggest difference from the Linux V4L2 implementation is that the header is found in /usr/include/sys/videodev2.h instead of /usr/include/linux/videodev2.h. That, and a small fix to gracefully handle ioctls that the OpenSolaris usbvc driver doesn't implement, and I was up and away.
Coincidentally, Tim Foster
was looking for talks for the Irish OpenSolaris User Group meeting last Thursday night. I thought people might enjoy a quick demo, so I volunteered.
I started off by showing that the camera shows up nicely in Ekiga, but I don't have a SIP account so I wasn't able to do much more there. Also, I really wanted to show the camera in GStreamer, since I'm a GStreamer guy. Note, for people who want to follow along at home I was using the version of GStreamer's V4L2 plugin from CVS. It's in the gst-plugins-good module, which is due for release
on the 18th February.
I tried a simple pipeline to show the camera output in a window:
gst-launch v4l2src ! ffmpegcolorspace ! xvimagesink
This captures the video using v4l2 (v4l2src is the name of the element responsible), and feeds it via the 'ffmpegcolorspace' element to the 'xvimagesink' output. xvimagesink feeds video the XVideo extension, and ffmpegcolorspace provides for any format conversion between the frame buffer formats the camera supports, and what Xv can handle. Actually, this pipeline didn't work by default on Tim's laptop. For some reason, it tried to capture at 1600x1208 pixels, which the camera doesn't support. It might work for you, not sure.
Anyway, the obvious fix was to explicitly choose a particular resolution to capture at:
gst-launch v4l2src ! video/x-raw-yuv,width=320,height=240 ! ffmpegcolorspace ! xvimagesink
This is the same as the first pipeline, with the addition of the 'video/x-raw-yuv,width=320,height=240' bit, which in GStreamer jargon is called a 'caps filter' - it filters down the set of formats that are allowed for data transfer between the 2 elements. By default, the pipeline will ask v4l2src and ffmpegcolorspace what formats they have in common, and pick one. By filtering it down, I'm forcing it to choose 320x240. Doing that made a little window pop up with the video in it. It looked a little like this, although this one was actually from later:
Next, I thought I'd show how to save the incoming video to a file. In this case, as an AVI with MJPEG in it:
gst-launch v4l2src ! video/x-raw-yuv,width=320,height=240 ! ffmpegcolorspace ! jpegenc ! avimux ! filesink location=osug-1.avi
The difference here is, instead of feeding the video to an Xv window, it goes through a JPEG encoder (jpegenc), gets put into an AVI container (avimux) and then written to a file (filesink location=$blah). I let it run for 5 or 6 seconds, and then stopped it with ctrl-c. The result looked like this:
Apologies for the blurriness - I was waving the camera around and it didn't really get a chance to focus.
Alternatively, I could have used something like this to record to Ogg/Theora:
gst-launch v4l2src ! video/x-raw-yuv,width=320,height=240 ! ffmpegcolorspace ! theoraenc ! oggmux ! filesink location=osug-1.ogg
I can play the recorded video back with a pipeline like:
gst-launch filesrc location=osug-1.avi ! decodebin ! ffmpegcolorspace ! xvimagesink
This uses filesink's cousin 'filesrc' to read from an existing file, feeds it to the nice 'decodebin' element - which encapsulates the ability to decode any audio or video file GStreamer has installed plugins for, and then feeds the result (a sequence of raw YUV video buffers) to 'ffmpegcolorspace ! xvimagesink' for colorspace conversion and display in a window.
Anyone who watched the clip might be wondering why there is a guy in the front holding up a bright orange folder. For the next trick, I wanted to show the nice 'alpha' plugin. By default, alpha simply adds a alpha channel with a given opacity to the video as it passes through. However, it also has a green-screen mode. Or, in this case, orange-screening.
First, I played the video I captured in totem
, and paused it at a suitable frame. Then I used the 'Take Screenshot' item in the Edit menu to save it out as a png - which actually became the first photo above. Next, I opened the png in the Gimp
and used the eyedropper to isolate the RGB triple for the orange colour. Somewhere around Red=244, Green=161, Blue=11
At this point, I used live video for the rest of the demo, but I didn't think to capture any of it. Instead, I'll use the short clip I captured earlier as a canned re-enactment. So, I ran the video through a pipeline like this (using v4l2src etc instead of filesrc ! decodebin):
gst-launch filesrc location=osug-1.avi ! decodebin ! alpha method=custom target-r=245 target-g=161 target-b=11 angle=10 ! videomixer ! ffmpegcolorspace ! xvimagesink
This pipeline uses the alpha plugin in 'custom' (custom colour) mode, to add an alpha channel based on the bright orange colour-key, and then uses 'videomixer' to blend a default transparent looking background in behind it. Here:
The colour-key effect breaks up a little in places, because the skin tones and the wood of the desk get a little too close to the orange of the folder. A better choice of colour and filming conditions are really needed to do it well :)
And now for the really tricky bit:
gst-launch filesrc location=osug-1.avi ! decodebin ! alpha method=custom target-r=245 target-g=161 target-b=11 angle=10 ! videomixer name=mix ! ffmpegcolorspace ! xvimagesink \
filesrc location=bg.avi ! decodebin ! ffmpegcolorspace ! mix.
This pipeline adds two things to the previous one:
1) It adds a 'name=mix' property assignment to the instance of the videomixer element. This makes it easier to refer to the instance by name later in the pipeline.
2) It adds a second filesrc, reading in a file named bg.avi
, decoding it and then feeding it into the element named 'mix' - which is the instance of the videomixer element. Adding a period to the name lets GStreamer know that the connection should be made to an existing instance of something with that name, rather than creating a new instance of some element as all the other links do.
To save the output, I replaced the 'xvimagesink' with 'jpegenc ! avimux ! filesink location=osug-3.avi' to produce this:
There you go - a quick demo of doing a couple of fun things with GStreamer that don't require writing any code. Have fun!
|Thursday, January 31st, 2008|
|It's nice to be loved
I can't remember if I've had to make a brown paper bag release, so we'll call this the first one. On Monday, I released 0.10.16 of the GStreamer
Core and Base modules, and earlier today I released 0.10.17 of the same after we started seeing some reports of crashes.
It turns out that 6 months ago (0.10.14) we broke our ABI by deprecating some parts of the GstMixer class structures that we shouldn't have, because they were in public headers resulting in a couple of base classes (GstMixerTrack and GstMixerOptions) shrinking when compiling with GST_DISABLE_DEPRECATED. Noone noticed at the time, because those bits of the class structure weren't being used by anyone, and noone noticed if sub-classes allocated more space for their class structures than they now technically needed to.
Since then though, all the modules that use that piece of ABI got re-compiled, and now rely on a smaller parent class size, so when we inadvertantly put the structure entries by disabling the GST_DISABLE_DEPRECATED define in release builds, the OSS, SunAudio and Pulseaudio mixer sub-classes all started crashing. Which we would have caught in the release candidate tarballs, except that none of us thought about the fact that our pre-release tarballs were still building with GST_DISABLE_DEPRECATED, where the final release was not. Our fix is to bless the 'new smaller ABI', since noone has cared in 6 months that it changed, and the newer Base release reflects that. Core got another release too with a small compilation fix for Cygwin, mostly to keep the version numbers in sync.
I say "it's nice to be loved", because the broken release was out less than 2 days, and we're already nearing 60 dupes on the bug
I know this release is karma punishing me for being so bold as to try and write down GStreamer's first time-based release schedule
. It's too carefully calculated to show up only in the final release tarball to be anything else.
|Friday, January 11th, 2008|
|Nokia N810 hotness
Last night, I re-flashed my N800 with OS2008, and today my N810 turned up - I'm glad I elected to work from home today so I could play with it as soon as possible :) I was a little worried because I have heard at least 2 people that said their order was cancelled due to problems, one even after the item was reported as shipped! That, plus the fact that the UPS tracking status only reported 'billing information received' the entire time.
I'm impressed with the N810 hardware. For the most part it's very nice. I like the compactness, and have no problem with the slight weight increase over the N800. The hardware keyboard is cool, although I'm tempted to continue using my external Nokia keyboard because it allows a more normal typing style. There are a couple of hardware differences I'm not a fan of, but I understand why they did things this way. I liked having a standard SD slot rather than the mini-SD that the N810 has. I have several SD cards, but no mini-SD's. Ditto for the micro-USB connector that's replaced the more common mini-USB on the N800. The back cover feels a little thin when I remove it, but I don't expect to be doing that often anyway. Everything else, I love.
I can see lots of nice changes in the OS2008 release too, although the firmware that came pre-installed had some pretty rough edges. I had to reflash the N810 immediately with the latest firmware, which is not something I'd generally expect from a piece of consumer hardware. With the shipped firmware, I couldn't install skype from the 'Install Skype' option in the main menu (Unable to install Skype because libhildonfm2 >= 1:1.9.49 & libhildonmime0 >= 1.10.1 are missing). In the application manager, it had an update listed for the 'map' application, but would not actually allow me to make the update (Unable to install. Software contains updates to pacakges installed from a different source and is likely to harm the system).
Both problems disappeared after reflashing, but still, it marred the first impression.
Here are a few observations:
- I really like the idea of having GPS, and the included maps for Ireland & the UK are cool.
- When I'm indoors, the GPS can't get a signal at all, and it took about 10 minutes to get a lock the one time I took it outside. I hope that was a fluke and it works better next time, or I probbably won't end up using it much.
- I'm not a fan of the new 'finger sized' menus. I was happy with the old ones. A configure option would be cool.
- I like the new monochrome icon style in the status area.
- There's an annoying 'Gizmo' icon installed by default that I had to use Red Pill mode to get rid of.
- Is there any application that uses the camera installed by default? I can see the camera there, but I had to install the Camera app before I could check out the quality (it's not great), and there's a thing that looks like a flash above it that I haven't got to do anything yet
- I like the way the new backup tool also remembers my custom repositories and restoring re-installs the extra apps I had
- Gecko based web browser! Yay!
- Facebook is one of the default bookmarks provided, but it renders horribly, even in fullscreen. That's still an improvement though, in OS2007, it rendered horribly and didn't work (couldn't update status for example
- I encountered a few bugs in OS2008 that existed in OS2007 and didn't get fixed, which is not surprising since I never reported them
- The initial setup wizard doesn't pair with my phone (it just times out), but the standard pairing utility in the control panel does
- Even though my Nokia SU-8W bluetooth keyboard is one of those explicitly listed in the keyboard configuration applet, the ~ key on it doesn't work - it types *
- There's no obvious way to invoke the Operator Setup wizard other than pairing a new phone, which was a pain when I moved from Spain to Ireland and needed to switch service providers
Overall, except for needing to reflash my new device immediately after getting it these are pretty minor blemishes on an awesome product - well done Nokia dudes, and thanks for the developer discount - I'm looking forward to doing some hacking!