vrijdag 30 oktober 2009

GStreamer, Python, Qt, Mac OSX

I would like to develop a cross platform streaming-media application. We use:
  • Gstreamer, for its advanced pipeline features and active community;
  • Python, for its agility;
  • Qt, for its native feel on different platforms and
  • Mac OSX, to start with, because of its usability.
This seems to be a non-trivial combination. Acknowleding the call by Jono Bacon, I try to put my findings online so anyone using Google should be able to find it.

To start, I tried to show test video as a QWidget on Mac OS X. First I tried to adapt the example PyGST video player to receive an NSView. Unfortunately, using playbin, this is currently impossible. So, I had to just connect a videotestsrc to an osxvideosink. An extension to PyQt had to be made, to enable retrieving the NSView reference. Phil Thompson was so kind as to add this on 2009/10/10, which is now included in PyQt4 4.6.1. I submitted a patch to MacPorts to incorporate this upgrade, so you can now just install port py26-pyqt4@4.6.1.

A simple demonstration:

'''

Author: Sjoerd Op 't Land

Date: 30 October 2009

Sources:

http://ooboontoo.blogspot.com/2008/03/gstreamer-with-python-in-qt-learning-by.html

http://faq.pygtk.org/index.py?req=show&file=faq23.038.htp

http://doc.trolltech.com/4.5/qmaccocoaviewcontainer.html#details

Prerequisites (MacPort ports):

gstreamer

gst-plugins-base

gst-plugins-good

python_select (use to select Python 2.6 with "sudo python_select python26")

py26-pyqt4

py26-gst-python

gst-plugins-ugly

py26-pyobjc2-cocoa

'''


from PyQt4 import QtCore, QtGui # Qt bindings

import sys

import gst # gstreamer bindings

import Foundation # PyObjC bindings for Foundations framework


class TestMonitor(QtGui.QDialog):

def __init__(self, parent=None):

super(TestMonitor, self).__init__(parent)

layout = QtGui.QVBoxLayout(self)

self.label = QtGui.QLabel()

self.label.setText("SMPTE Color Bars with snow")

layout.addWidget(self.label)

self.player = gst.Pipeline("player")

self.source = gst.element_factory_make("videotestsrc","testsrc")

self.sink = gst.element_factory_make("osxvideosink","videosink")

self.player.add(self.source,self.sink)

gst.element_link_many(self.source,self.sink)


bus = gst.Pipeline.get_bus(self.player)

self.player.set_state(gst.STATE_PLAYING)

self.nsview = None

while self.nsview == None:

messagePoll = bus.poll(gst.MESSAGE_ANY,1000000000)

if messagePoll:

if messagePoll.structure and messagePoll.structure.has_key("nsview"):

print messagePoll.structure["nsview"]

# use a dirty hack to obtain the address of this gpointer

#TODO: make sure this also works on 64-bit systems

pointerAddress = int(str(messagePoll.structure["nsview"])[13:-1],16)

self.nsview = pointerAddress

# Pushing an NSAutoreleasePool on the stack is necessary to suppress

# leakage error messages. However, I'm not convinces that leakage is

# really avoided, this way.

#TODO: check for memory leaks

pool = Foundation.NSAutoreleasePool.alloc().init()

self.viewer = QtGui.QMacCocoaViewContainer(self.nsview,self)

del pool

self.viewer.setMinimumSize(320,240)

layout.addWidget(self.viewer)


if __name__ == "__main__":

app = QtGui.QApplication(sys.argv)

testmonitor = TestMonitor()

testmonitor.show()

app.exec_()




Some important things still are to be done:
  • Make this cross-platform
  • Check for memory leaks
  • Do this in a threaded way
Suggestions, comments and insults are welcome!

dinsdag 20 oktober 2009

Vrouwenhand

Afgelopen weekend is er een hele club NSU'ers naar Parijs komen liften, op initiatief van Hilde, en waaronder ook mijn zusje. Ik heb mij bij deze gezellige groep Nederlanders gevoegd voor de duur van het weekend.

Op zaterdag zijn we Centre Pompidou in geweest, met een spannende tentoonstelling over surrealisme. Zoals de naam belooft, vaak heel vervreemdend. Kunstwerk dat bij mij bleef hangen: een levensgroot nooduitgang-bordje, zodanig dat het witte mannetje in een oneindige lus rondloopt.

's Avonds hebben we gegeten bij Chartier, goed te betalen (EUR 20 voor drie gangen) maar je moet wel meteen weg als je het op hebt en reserveren is verplicht.


De volgende dag zijn Sifra en Hilde met mij mee geweest naar de kerk. Daarna hebben ze bij mij geluncht. Toen ze binnenkwamen zag ik al meteen aan hun gezicht 'wat saai, echt een jongûskamer'. Enfin, terwijl ik kookte hebben zij mijn kamer heringedeeld en een stuk gezelliger gemaakt. (Niet op de foto: kerstlichtjes, metrokaart boven mijn bureau, was in de badkamer i.p.v. naast de kast, koffer op 'zolder'.) Dit is toch een verklaarbare maar toch telkens fascinerende vrouwenneiging om het overal gezellig te willen maken. Hoe dan ook, ik leef nu in een gezelliger kamer: bedankt dames!


Zondag zijn we naar Parc de la Vilette en Cité des sciences et de l'industrie geweest. Dat laatste is een wetenschapsmuseum, echt gaaf hoe ze niet alleen natuurkundige, maar bijvoorbeeld ook wiskundige principes zichtbaar maken. Hieronder bijvoorbeeld de demonstratie van de centrale limietstelling. Van bovenaf valt een knikkertje op een serie spijkers, waar de kans om links of rechts te vallen ongeveer gelijk is. De som van acht van deze Bernouilli-experimentjes (niet normaal verdeeld), begint toch verdacht normaal verdeeld te lijken!




zaterdag 10 oktober 2009

Uitvaart

Gisteravond kwam ik in de kerk voor de koorrepetitie, maar meteen merkte ik dat er een vreemde sfeer hing. Op de vraag of er vanavond repetitie was, kreeg ik 'pas exactement'. De vader van één van de koorleden bleek overleden met vanavond de gedenkdienst. Dat betekent dat we in één uur in sneltreinvaart alle liederen hebben doorgenomen, waaronder 'Au dernier jour' ('Oh when the saints').

De man in kwestie was Congolees, dus de gedenkdienst was nog Congoleser dan katholiek. Het lichaam was overigens al gevlogen: naar Congo inderdaad. Het schijnt vrij gebruikelijk te zijn voor deze mensen (welke groep precies?) om in hun vaderland begraven te willen worden. En inderdaad, alle vooroordelen kloppen: de dienst was gepland van 22h00 tot 23h00, gerealiseerd van 22h30 tot 0h00. Maar ook: de voorbeden gingen in vraag- en antwoord-zang. De voorzanger liep een beetje rond en gebruikte zijn adempauzes (wanneer de gemeente hem nazong) om bij mensen te informeren of hij nog moest bidden voor die-of-die. Geniaal.

dinsdag 6 oktober 2009

ElBas-versterker

Vandaag weer eens iets geheel voor het eerst gedaan: solderen onder een stereoscoop. De loep was mij al bekend (erg fijn), maar met 10x vergroting en echte diepte, gaat er al een heel nieuwe wereld voor je open. Waar je bij goed licht nog net de drie cijfertjes op een 0603 weerstand kunt lezen, daar zie je nu het reliëf van de opdruk. Van een draadje dat je buigt, kun je nu zien dat 'ie tordeert als een tuinslang, de harskern in het soldeer kun je nu zien borrelen. Geweldig!


Enfin, wat was het doel? In een poging om een differentieel signaal te maken met een regelbare fasedraaiing tussen de common-mode en de differential-mode spanning, had ik een regelbare attenuator nodig. Op normale frequenties volstaat hiervoor een potmeter, maar die heeft, zoals bekend, geen constante uitgangsweerstand en al helemaal geen 50 ohm. Daarvoor was een buffertrap nodig en met mijn laatste restje ElBas kennis en het compendium elektrotechniek (toch niet voor niets meegenomen) is het gelukt. De kenner ziet ogenblikkelijk welk component ervoor zorgt dat we de 1 GHz niet gaan halen, maar 1-100 MHz (-1 dB bandbreedte) vond ik lang niet slecht.

zaterdag 26 september 2009

l'Equipe

Vandaag nam mede-stagaire Adeline afscheid van ons. Een goede gelegenheid voor een groepsfoto. Niet iedereen staat erop (vooral een aantal Certificatie-mensen ontbreken), en stiekem was er ook wat secretariaat op de taart afgekomen, dus die belandden ook op de foto.



Geheel links Fréderic, mijn officiële begeleider, tevens teamleider van Innovatie. Op de stoel vooraan Younes, die mij zoals gezegd heeft rondgeleid, daarachter Adeline. De meest Amerikaans ogende man met blauwe polo is Imad, waar ik inhoudelijk zowel als persoonlijk veel aan heb. De lege stoel was een mooie plaats geweest voor François, maar die krijg ik nog wel te pakken. Voor nu blijft 'ie voor Elia.

zondag 20 september 2009

Rencontrez Rob, rencontrez Paris

Vanaf donderdag heeft Rob hier gelogeerd, die op de terugreis van een conferentie langs Parijs kwam, en de stad graag wilde leren kennen. Het weekend was ik ook vrij, zodat we samen de obligate en minder obligate plaatsen konden aandoen. Zo hebben we de gezelligheid op de bruggen rondom Île de la Cité genoten, en de Notre Dame bij nacht gezien (van buiten dus). Best een mooi gezicht allemaal.


Overdag hebben we ons ondergedompeld in de veelheid van indrukken van het Louvre. Er is daadwerkelijk gigantisch veel te zien. Meestal doen allerlei opgraafsels (uit Egypte, namelijk) mij niet zoveel, maar toen ik even de tijd had genomen om me te realiseren dat deze voorwerpen daadwerkelijk allemaal een keer gemaakt en gebruikt zijn, kwam het tot leven. Als ik de tijd nu zou terugspoelen, dan komt er echt een moment dat mensen hier wijn uit schenken of dit beeldje aanbidden. Curieus... Verder nog in de Notre Dame geweest (en ons ook verbaasd over het dynamisch bereik van onze ogen).


Mocht je ooit nog in Créteil willen uitgaan: slecht idee. Na een uur gedwaald te hebben, kwamen we toch weer bovenin het winkelcentrum. Te arren moede hebben we daar in een Union Bar-achtige setting een biertje gedronken, maar dit was natuurlijk niet het bruine café waarop we gehoopt hadden. Op advies van een collega hebben we in het straatje 'Butte aux Cailles' (metro Place d'Italie) een gezellige uitspanning gevonden. De foto is wat vaag, maar... dat waren wij toen inmiddels ook. (Daarvóór hadden wij ons geluk beproefd op Rue de la Lappe (metro Bastille), maar toen we op een gegeven moment meer ME dan burgers om ons heen zagen, hebben we maar rechtsomkeert gemaakt. Voor Scintilla's activiteit 'Rellen met de ME' hebben we ook altijd beleefd bedankt.) Een andere optie, misschien later nog, was Rue Mouffetard (metro Place Monge).

zaterdag 12 september 2009

Stage komt op gang

Leven zonder internet is echt goed voor je, zeg! Allerlei zaken waar ik anders geen tijd voor neem komen er ineens van (boekhouding, bijbelstudie, brieven schrijven). Tegelijk komen bepaalde 'eigenlijk...'-dingen er nog steeds niet van (vocabulaire stampen), waardoor blijkt dat ik ze echt niet zo belangrijk vind. En: ik lig er op tijd in.

Afgelopen weekend niet veel gedaan. Woensdag is de zelfverdediging er niet van gekomen (geen zin-tijd-energie).

Donderdag is mijn begeleider op het werk gekomen en daarmee het leven in de brouwerij. Hij heeft wel wat weg van Stramigioli qua beschikbare tijd, maar dus ook qua gevoel van importantie bij wat hij doet. Er komen nu echte discussies van de grond over de inhoud van mijn opdracht. En... ik heb de eerste vertrouwelijke ontwerpen gezien. Zijn humor en betrokkenheid bij de werknemers maakt de sfeer ineens heel wat losser; het is nu heel wat minder stil en daar ben ik erg blij mee.

Zondag wel naar de kerk geweest; St. Michel, hier vlak om de hoek. Ik was te laat, maar gelukkig was ik niet de enige. Grappig: een katholieke kerk qua muziek en liturgie, maar evangelisch van toon (de zendingsopdracht (geloof ik) staat op de muur, boekjes over bijbellezen en het geloof staan bij de ingang). Drie mensen hebben mij expliciet welkom geheten, waarvan er maar één volgens mij officieel die taak had (kan de PKN nog een puntje aan zuigen). Verder is de kerk overwegend zwart.

Vrijdagavond naar de koorrepetitie geweest. Geniaal! Marie-Claire was de enige aanwezige sopraan, maar is geweldig in solvège (maar dat vindt ze zelf niet). De koorleider Albert heeft een geweldig bereik, maar is iets minder goed in pianospelen. Ik begon bij de tenoren, maar werd al snel naar de bassen verplaatst. Naast mij zit Gilles, die geen noten kan lezen, maar erg leergierig is en onbegrijpelijke aantekeningen maakt om toch de melodie te onthouden (roerend).

Vandaag maar eens Parijs ingegaan, vooral met het doel het OV te gaan begrijpen en te weten wat er te doen is. De Notre Dame van buiten eens goed bekeken, straatartiesten bij het Centre Pompidou genoten, geluncht met een crêpe en daarna het winkelcentrum Les Halles doorgeslenterd.

donderdag 3 september 2009

Maximaal +0 dBm

Vanochtend voortvarend handen geschud; het blijkt echt normaal te zijn. Goede werkdag gehad, wel erg rustig: veel collegae blijken op 'apprentissage' (als onderdeel van een leer/werk-programma).

David heeft geholpen om een 40 dB RF versterker door te meten, nadat ik 'm per ongeluk mishandeld had. (Nu bij de ingang daarvan maar een stickertje 'MAX 0 dBm!' geplakt...) Gelukkig doet 'ie het nog en nu weet ik meteen hoe precies ik die 40 dB moet opvatten (niet zo precies: 42 dB +/- 3 dB).

Verder niet zoveel meegemaakt. Ik realiseer me wel dat ik bij gebrek aan internet meer op mijn naaste ben aangewezen omdat ik minder zonder te vragen kan uitzoeken. 'Please swallow your pride, when I have things you need to borrow, for no-one can feel those of your needs that you won't let show.' Een gratis oefening, waar ik helemaal geen zin in heb.

woensdag 2 september 2009

Bonjour Valeo

... is het woord waarmee iedereen die binnenkomt elk ander de hand schudt. Het kantoor van Valeo is zeer verzorgd, net als de mensen. Smart casual was dus inderdaad ongeveer raak: sommigen lopen in overhemd boven een spijkerbroek, anderen in pak, maar iedereen loopt er verzorgd bij.

Mijn directe begeleider is er niet, maar hij heeft voor een goede instructie en een plaatsvervanger gezorgd: Younes. Verder maakte ik kennis met Aledine (een Libanese), François (de oudste, met de lach van een levensgenieter) en An (een Chinees). Het is rustig op het lab en iedereen houdt rekening met elkaar, zo lijkt het; labtafels worden netjes achtergelaten en soldeerstations broederlijk gedeeld. Ik ben lid van team Innovatie, dat samen met Certificatie en Ontwerp een kantoorruimte deelt die grenst aan een fatsoenlijk EMC-lab. Strategisch ingericht en het is natuurlijk ook wel stoer om in een gebied met de geheimste classificatie te mogen werken (een "zone rouge"). Geen foto's uit het lab dus, helaas.

Als we gaan lunchen blijkt dat Younes en zijn overbuurman moslim zijn: zij houden de Ramadan. Mijn respect groeit verder als Younes rustig bezig is om mijn kantine-pas te regelen.

Er zijn nog heel wat raadsels voor mij, maar gelukkig kan ik zonder alle antwoorden toch snel aan de slag. Ik heb vandaag al lekker zitten meten, debuggen en solderen (met succes). Morgen ga ik mijn soldeerwerkje afmaken: een testprint voor een CAN-bus transceiver. Een immuniteits-test (voor geleide storing) blijkt op nogal veel manieren te kunnen. Gelukkig is er in Valeo- en andere protocollen al goed nagedacht over hoe je met zo min mogelijk metingen een apparaat zo volledig mogelijk 'doorfluit'.

Dat was de tweede dag.

... of toch niet. Zojuist nog even door de résidence gewandeld en ik kwam een man in judopak tegen die zelfverdedigingslessen geeft. Het blijkt een Congolese vechtsport, Mukumbusu ("Gorilla") te zijn. Ik heb als enige blanke een training meegedaan en ik heb me zeer vermaakt. Twee jongens die over mij (?) fluisterden moesten daarvoor opdrukken; de man heeft de wind eronder. Bij het oefenen van een offerworp wel mijn linkerknie bezeerd, maar dat gaat wel weer over. Volgende week weer!

dinsdag 1 september 2009

Bonjour Créteil


Vanochtend op de Thalys gezet door Hilde en Martin. Pas halverwege de rit, ziende op de Franse bewegwijzering naast het spoor, begon ik me te beseffen waar ik aan begonnen was en krijg ik er daadwerkelijk zin in. Een lach.

Aangekomen bij de ALJT, heb ik een bureaucratische conversatie met Mme SAÏD, ze bedoelt het goed en ondergaat met mij gelaten de procedure en de zoektocht naar de benodigde papieren. De eigenwijsheid van de Fransen die mij met de taalverwerving zou moeten helpen werkt beter dan ik had durven hopen: voornoemde dame spreekt geen Engels, dus ik moet wel Frans spreken en luisteren. Het gaat met horten en stoten, fout op fout, maar in elk geval raak ik mijn gêne kwijt.



Het gebouw en de kamer zien er erg schoon en verzorgd uit. Op de résidence worden allerhande activiteiten georganiseerd voor de sociale contacten en verbroedering. Mijn kamer kijkt uit op het westen en meet zo'n 2,5 bij 4 meter, plus nog een toilet/douche. Er is een gedeelde keuken die niet alleen volgens de instructies erg netjes wordt achtergelaten. Proper allemaal!





Keukengerei gekocht en huishoudboodschappen gedaan. De kamer ingericht en Hildes schilderijtje opgehangen. Tijdens het koken maak ik kennis met ene Fanta (?!). Het converseren gaat eigenlijk wonderwel en van schrik neem ik afscheid, hoewel zij nog wel wat langer wil blijven kletsen.

Enfin, ik vraag de weg voor morgen en ga bijtijds slapen. De eerste dag.