Present Perfect


Picture Gallery
Present Perfect

PulseAudio making a killing

Filed under: General — Thomas @ 19:59


From top:

13815 thomas 20 0 3813m 1.5g 13m S 6.3 40.4 632:22.30 pulseaudio

W. T. F.

First GStreamer conference

Filed under: Conference,GStreamer — Thomas @ 16:55


I'm in Cambridge (the UK one, not the US one) for the first ever GStreamer conference!

Years ago when I was in a cabin in the middle of the woods in Norway at four kilometers away from the closest main road and cut off by waistdeep snow, I never imagined that today I would be attending a conference dedicated to GStreamer with 150 people. 150 !

It seems the conference is a good mix between professionals and hobbyists. I've seen a few interesting applications built on top of GStreamer. Pretty cool stuff.

I took a quick look at the conference schedule and out of 19 talks, seven of them are from people that have been employed by the Fluendo group in the past, and for most of them it was their first full-time GStreamer job. It's great to see these people branched out to other companies and taking GStreamer with them and higher up!

All in all, looks like the GStreamer community is in good shape. Next year, we'll need two days...

While we're at it, we should be handing out '10 years of GStreamer badges' to the people that have stuck by us so long :)

python pystack gdb macro

Filed under: Python — Thomas @ 17:06


As mentioned before, I ended up getting a working pystack macro again for use in gdb. Someone commented I should make it public so here it is:

# THOMAS: the test for between Py_Main and Py_GetArgcArgv is because
# code is in that order in the C file; see Modules/main.c and its comment
# print the entire Python call stack
# same for eval in Python/ceval.c

# in 2.6, PyEval_EvalFrame is only bw compatible, and code now calls
# PyEval_EvalFrameEx
define pystack
set $__lastpc = $pc
set $__same = -1

while 1 == 1
# select the highest frame with the same $pc
# this will automatically terminate if we reach the top
while $pc == $__lastpc

if $pc > PyEval_EvalFrameEx && $pc < PyEval_EvalCodeEx pyframe else # frame end up-silently 1 set $__lastpc = $pc end select-frame 0 end

I also posted it in the upstream bug but I doubt that's going to achieve much in this case...

Train shedding

Filed under: Conference,Flumotion,GStreamer,Hacking — Thomas @ 03:57


Had a good time at the OpenVideo Conference in New York City, as well as today at (cut short for me) FOMS.

I took the Amtrak train from NYC to Boston and was looking forward to doing four hours of hacking, knocking up a quick prototype of doing chunked streaming of Ogg and WebM.

I didn't actually get to that point however because my test stream triggered the streamer going lost, meaning that its main loop is stuck. So attaching gdb I was reminded how the 'pystack' macro in gdb (which was incredibly useful - it prints a python stack) hasn't worked for me for the last couple of years.

And this time I set out to properly fix it. If only the docs on gdb were easy to understand. My knowledge of gdb doesn't go much beyond the standard 'thread apply all bt' stuff and doing simple inspection. I ended up understanding why the macro hangs (it compares the value of $pc to known function names, and goes up the stack until it finds PyMain. In most of my cases there is no PyMain however, and when you go 'up-silent' in gdb at the top of the stack, it just silently fails leaving you at the same frame forever).

I don't claim to understand exactly how gdb works; for example, there are cases where $pc stays the same going up a frame, seemingly because a function is wrapped into a macro which seems to get its own frame. So I ended up writing a loop that goes up until the $pc changes, and then go back down, leaving me at the frame that calls a python method with a code object.

So, now I have my pystack working again in the cases I tested, so that's good.

Incidentally, if anyone knows gdb well enough, here are some questions:

  • Is there a way I can detect in a script that 'up' didn't actually go up ?
  • Is there a programmatic way to know how many frames there are, and what frame number you're on ?

After fixing that, I was again bitten by a bug where - not always, but often - a flow with Vorbis and Theora has a timestamp/duraiton discontinuity of 1 nanosecond. I can't reproduce it on the command line with -launch, so I think it's related to a set_base_time call on the pipeline.

So I started writing a unit test, but for some reason make check in gst-plugins-base doesn't work for me because it can't find capsfilter and other core elements. So I get to dive into the test setup code again to figure out why a registry is getting generated that blacklists coreelements...

The train pulled into Boston as I was looking into how the new registry code works and why it blacklists coreelements, so I'll have to save this test for a later day...

Incidentally, I have a day off in Boston this week. I really want to finally go to MIT and follow a class there, in computer science or mathematics. Is that sort of thing open in the US ? Can you just sit in on a class ? Any tips ?

Open Video Conference

Filed under: Conference,Flumotion,Hacking — Thomas @ 15:36


The Open Video Conference here in New York has just kicked off, and Flumotion is streaming it live in Ogg/Vorbis/Theora and WebM!

I'm talking about HTML5 live video, Flumotion, Theora and WebM today, a little after 11:45 local time (NYC, -4 GMT), which is around 17:45 and later for the folks back home, in the second room, in the Amphitheatre. Make sure you use a recent enough browser that supports either Theora or WebM, like Firefox 4 Beta!