|
|
Spent way too long not writing anything, should catch up on that soon.
But meanwhile, a quick shot of our office stream on a phone
RTSP/RTP H263 streaming using GStreamer and Python.
Spent way too long not writing anything, should catch up on that soon. But meanwhile, a quick shot of our office stream on a phone RTSP/RTP H263 streaming using GStreamer...
Pfff. A whole day of fighting against a mesmerizing bug in either of python, gnonlin, gst-python, or pygtk. A simple program that did nothing more than
import gst
gst.element_factory_make("gnltimeline")
was throwing an assertion in python's garbage collector. I had this problem on FC2, FC3, and FC4. Edward didn't have this particular problem on his Gentoo machine, and Jan wasn't having it on his Breezy install (which has pygtk 2.7.something, by the way), even though his breezy was broken in other places.
Of course, I didn't have a need for this particularly short program, but for some reason gnltimeline triggers creation of some object that gets garbage-collected in my application where I do want to use it, even if I keep the element around. In Edward's examples, it only asserts when leaving the application; but when I use it, it asserts as soon as Python garbage-collects after creating.
We tried a lot of different approaches, and in the end I just gave up. Days like these are lost forever. It probably didn't help that I was still a bit tired after last night's Xiph meeting at 2 AM, but still - compared to last week's excellent flow in dire circumstances (more later) this day was an absolute low point.
Pfff. A whole day of fighting against a mesmerizing bug in either of python, gnonlin, gst-python, or pygtk. A simple program that did nothing more than import gst gst.element_factory_make("gnltimeline") was...
asleep in the sun with the ocean washing over |
|
Kristien and I spent a weekend at Mallorca. Mallorca is very nice - if you manage to stay away from the touristy bits (one strip of road we passed had no less than seven (7) SPAR stores over a length of one kilometer). Luckily we had an excellent local guide in the form of our friend Jauma - or "Jim" as his Mallorquina friends call him.
We spent the weekend going to rocky and sandy beaches, going to a birthday barbecue in a house with a nice swimming pool and lots of food (eating in the pool is an excellent way to spend an evening), partying at the local fiesta, snorkeling and frolicking in the water, and visiting some small towns, including the town where we were trying to get invited to Michael Douglas' and Catherine Zeta-Jones' outhouse. Sadly the happy couple had moved out and their place out there is now a restaurant where you have to pay just to get in.
|
that feline feeling |
I don't know how cats manage this in this heat.
asleep in the sunwith the ocean washing over Kristien and I spent a weekend at Mallorca. Mallorca is very nice - if you manage to stay away from the touristy...
A one-acter to be performed in a square-shaped room with unopenable windows
DRAMATIS PERSONAE:
- Thorsten
- a dashing young man with an autistic hang-up on quality in all the wrong places
- hedonism
- an IRC bot insulting people who break the build, and praising those who fix it
- Dorkus Molorkus
- a big-haired hacker sitting opposite of Thorsten
- gstreamer
- an interesting little CVS module giving home to libgstreamer.so and libgstbase.so
- Hobbit
- an intern with a craving for cheese caught in the crossfire
- the GNU toolchain
- a collection of useful tools evolved through combinations of genetic programming and bacterial cultivation techniques
- gst-plugins
- another CVS module depending on gstreamer and providing libgstaudio.so and containing a plugin called libgstximagesink.so
- Hens Jamestridge
- a wise hacker secreting years of experience into little pearls of information somewhere south of the equator
Curtain opens and light is cast on a dashing young man with an autistic hang-up on quality in all the wrong places.
On an eternal quest for cleanliness, Thorsten finds some code that does not correspond to his sense of aesthetics. He commits a bunch of code that changes gst_audiosrc_ to gst_audio_src_ all over the place.
|
Some time later, Hobbit makes an innocent change to some documentation and commits. Until suddenly ...
|
|
Hedonism: |
Go eat some cheese instead of committing, Hobbit. You broke the build of gst-plugins-osx
|
|
Hobbit: |
(grunting) Merde, stupid bot. Why are you complaining to me ?
|
|
Thorsten and Dorkus exchange some unrelated pleasantries refering to their mothers. Half an hour goes by.
|
|
Hedonism: |
Wouldn't you rather work on MPlayer, Hobbit ? You broke the build of gst-plugins-osx
|
|
Hobbit: |
(grunting) Die, hedonism. I didn't break anything, you're the one who's broken.
|
|
Thorsten: |
(looks up and investigates actual problem). Hm, this is strange. The documentation is complaining about gst_audio_src_get_type missing. I changed that name this morning. (tries locally, things work). Hm. I'll force another build. Hedonism, build gst-plugins-osx.
|
|
Hedonism: |
building gst-plugins-osx. I'll holler when it's finished.
|
|
Time passes. Dorkus makes another reference to Thorsten's mom, followed by:
|
|
Dorkus: |
personal note - 14.43 - Thorsten seems unaffected by repeated references to his mom.
|
|
Hedonism: |
As a penalty for your actions, beers are on you, Thorsten. You broke the build of gst/plugins-osx.
|
|
Thorsten: |
(looks at build log) Hm, still complaining about the same thing. This doesn't make any sense. libgstxvimagesink.so seems to be missing gst_audio_src_get_type, but I know it's in libgstaudio.so because I made that change and it works fine here. I sure wish I could log into that build slave. Let's check the other slaves. (investigates unstable slaves). Oh, this 32-CPU build slave seems to have the same problem. (logs in, runs make manually). Yep, fails. What to do now ?
|
|
GNU toolchain: |
(whispering)
We are a collection of useful tools evolved through combinations of genetic programming and bacterial cultivation techniques. Use us !
|
Thorsten: |
... but, (h pronounced gutturally, as if being a Barcelonan waiter) hhhhhow ?
|
|
GNU toolchain: |
(whispering) using ldd on libgstximagesink.so will show you what libraries the plugin is linked against.
|
|
Thorsten: |
(tries the command) Huh. it's linked against an installed copy of libgstaudio.so, in the prefix. Why would this happen ?
|
|
GNU toolchain: |
(whispering) Order. Order.
|
|
Thorsten: |
What's that ? I can't quite make that out.
|
|
Dorkus: |
(running his hands through his hair, making it even bigger than usual in the process) Your mom can't make out. HAH ! (puts up arms defiantly in the classic Vanilla Ice pose but putting up his fingers in a traditional metal gesture)
|
Thorsten: |
(ignoring Dorkus) Curse you, libtool ! You are Sithspawn.
|
|
GNU toolchain: |
(whispering) We are powerful. But we can only be wielded by those who are worthy.
|
|
Thorsten: |
I shall not be thwarted in my quest for quality. I will seek out the writings of Hens Jamestridge on the intarweb and reach enlightenment ! (starts seeking out writings)
|
|
Hens Jamestridge: |
(a complicated explanation best summarized in http://advogato.org/person/jamesh/diary.html?start=175) |
|
Thorsten: |
(reading it over nine times in the hopes of understanding it) Hm, this looks related to my problem, but I can't tell for sure. It seems that somehow this plugin is being linked to an installed copy of libgstaudio.so from before my Quality change. Strings on that installed copy confirms it's still the old version. Of course, the buildslave will not - and should not - install the new version until it's satisfied that this new version builds properly. Verily, this is a deadlock ! What to do ?
|
|
Thorsten: |
(goes to the toilet for a quick thinking break, taking along a magazine that just happens to have an article on the new libtool 2.0 release, proving that God doesn't play dice. Sadly the article is short on details. Thorsten flushes and washes hands, then goes back.) |
|
|
Thorsten: |
(reading over Hens' article a tenth time). Hm, so the -L flags affect the library lookup path - I knew that much. Maybe that is my problem here ? (looks at build output and linker flags). Ah, yes - there's a -L flag for the prefix right at the start of the link line. Where is that coming from ?
|
|
Hedonism: |
I find your lack of skill disturbing, Hobbit. You broke the build of gst-plugins-osx.
|
|
Hobbit: |
(grunting) #(*!&$ Get lost, stupid bot. (Hobbit kicks bot, but has no ops). Grrrr.
|
Thorsten: |
(getting ashamed of his precious bot insulting people) Verily, I shall not rest until I have figured this out. (starts diving into .la files, Makefile, and twiddling various flags, experimenting all the while. A theory forms itself. Thorsten waves at Dorkus)
|
|
Dorkus: |
(waving arms around wildly, in time with the music on his headphones other people can't hear) YOUR MOM ! (removes headphones) Um, sorry, what ? Whu-whu-whu-what ? Are you speaking ?
|
|
Thorsten: |
(waiting for Dorkus' attention) How good is your library-fu ?
|
|
Dorkus: |
(eyes like a rabbit caught in headlights) Uhm, why ?
|
|
Thorsten: |
Can I try out my theory on you on what's going wrong.
|
|
Dorkus: |
(trying really hard to say "NO") Uhm, sure, why not.
|
|
Thorsten: |
Well, it involves libtool and stuff. (Thorsten starts explaining away)
|
|
Dorkus: |
(eyes glazing over after the word "libtool" falls) I'm sorry - I lost you after you said libtool. (puts headphones back on, continues to shake arms around wildly)
|
|
Four hours go by, and one by one, hackers leave the room, until finally, only Hobbit and Thorsten remain. During these four hours, Thorsten's Thunkpad starts wheezing louder and louder, like an astmathic turtle dragging itself back to sea. Thorsten ignores the dying Thunkpad.
|
|
Thorsten: |
(talking to himself) Ok, so I think I figured this out. We're pulling in -L flags because of pkg-config gstreamer --libs containing them, and we're putting those in libgstximagesink_la_LDFLAGS through GST_PLUGIN_LDFLAGS. And this happens to come before libgstximagesink_la_LIBS, so the -L appears on the final link line before our internal copy of the libgstvideo.la file that's in _LIBS.
|
|
Thorsten: |
(starts editing a slew of Makefile.am and configure.ac) so if I'm correct, I should never use small-el or big-el flags in LDFLAGS, and order my LIBS contents so that from high-up to the bottom of the dependency stack, so that in-module libraries do not get switched out for old installed copies. Now, let's see what this does on that 32-CPU machine ...
|
|
Thorsten: |
(waits until make completes) GNU toolchain, what sayest thou ?
|
|
GNU toolchain: |
(whispering) ldd seems to say that libgstximagesink.so now correctly points to the uninstalled copy of libgstvideo.so
|
|
Thorsten: |
Hurray ! (Thorsten commits fix)
|
|
Time passes.
|
|
Hedonism: |
The emperor will be pleased, Thorsten. You fixed the build of gst-plugins-osx.
|
|
Thorsten: |
EXCELLENT !
|
Hobbit: |
(grunting)Hedonism, still waiting for those apologies.(Hobbit leaves to go home.)
|
Thorsten: |
(savouring the moment after four hours of staring at .la files, link lines, and Makefiles, shaking his hands at the sky like tiny antennas) I 0WNZ0RZ LIBTOOL ! (looks around, sees that the lights went out and nobody's there) Hm, no one here to applaud me loudly and thus solve my fan problem. I shall have to part with this Thunkpad soon if this keeps up.
|
|
Thunkpad: |
Wheeze.
|
GNU toolchain: |
(whispering) So what have you learnt, young Thorsten ?
|
|
Thorsten: |
I've learnt that I should not put libraries in LDFLAGS. I've also learnt that I should order my _LIBS starting from the library highest up in the dependency chain. And finally, I've learnt that I should not just blame libtool for my incompetence like so many other hackers. Libtool is doing the right thing. Everything works fine now. Thank you, GNU toolchain !
|
|
GNU toolchain: |
(whispering) My precioussssssssssss.
|
Curtain falls. |
I'm sorry, but figuring out linking problems hurts my brain. I had to retaliate and hurt yours too.
A one-acter to be performed in a square-shaped room with unopenable windows DRAMATIS PERSONAE: Thorsten a dashing young man with an autistic hang-up on quality in all the wrong places...
this guy now works for us |
|
Michael Smith (of icecast and vorbis-tools) joined us yesterday. He made his first commit to Flumotion today, woohoo.
All of us here at the office are currently working hard on GStreamer 0.9
Some excellent progress is being made, definitely liking some of the things I see. Andy is busy porting over elements that Flumotion uses, Edward is rocking hard on the python bindings, Wim is working out more core issues and finishing his GLib patches, and Christian is cheerleading and testing.
I started running Jamboree with 0.9. I imported my 120 GB of Ogg Vorbis files and saw it die around 10% of the way through due to lack of memory. So I wanted to valgrind the gst code it's using to read tags, but ever since upgrading to FC4 my valgrind kept segfaulting on me. Until I realized I had an old compiled-from-source copy in my homedir's prefix. After removing that, it worked again. And after doing that, I started to actually valgrind our unit tests. That was a good idea - it turned up a whole bunch of leaks and issues to work on. I stole the idea of valgrinding regression tests from Conrad Parker, and it's pretty damn smart. So I spent two days adding more and more of them to our valgrind test suite, fixing bugs along the way.
I wanted to turn it on by default as part of make check, but since versions before 2.4 didn't have decent threading support, some of our build slaves started locking up. So I guess I'll need to make a separate target for the valgrind tests.
|
this guy is a visionary he valgrinds his regression tests - from make check - |
I'm liking the use of subclassing in the 0.9 branch of GStreamer. I had added a num-buffers property to sinesrc to make it easier to test pipeline cleanup, just like fakesrc had. Except I noticed this week it was leaking a buffer somewhere. So instead of debugging the code, I moved the num-buffers property to basesrc (since all sources send buffers, so all of them can EOS after sending a number of buffers if wanted), and removed it from fakesrc and sinesrc. So, end result:
-
the leak in sinesrc is fixed
-
I removed two blocks of code and added one, so there's less code now
-
I also get the num-buffers property on videotestsrc (and other sources) for free.
my view on the world, 50% the horror, the hair, the alphabet |
|
After fixing the more obvious leaks related to tagging, jamboree read my whole 120 GB of Oggs in one single go. Been playing ever since that, too. There's a bug for mp3, I guess we need to look at that. But I've got enough music for now...
The next GStreamer is going to be excellent. It's taking time, but the seeking is luverly, the threading seems to work out very well, and there's some serious quality being spread out over it.
Time for some Quakage - later.
this guy now works for us Michael Smith (of icecast and vorbis-tools) joined us yesterday. He made his first commit to Flumotion today, woohoo. All of us here at the...
« Previous Page — Next Page »
|