Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: Getransformeerde video's en widgets in Qt 4.4  (gelezen 3533 keer)

Offline profoX

  • Lid
    • wesley
    • Lionslink
Getransformeerde video's en widgets in Qt 4.4
« Gepost op: 2008/06/10, 00:00:10 »
Je kan blijkbaar een QWidget waar een videofilm afspeelt met Phonon op een QGraphicsView plaatsen.
Ik wist niet of het mogelijk zou zijn, want ik had nergens een voorbeeld gezien, maar blijkbaar is het dus heel triviaal om het te doen dankzij het nieuwe QGraphicsWidget systeem van Qt 4.4

...En dat kan een leuk effect geven...
Ik heb door slechts een paar lijnen aan te passen in één van de demoprogramma's van Qt 4.4 dit weten te bekomen:



Best geinig dat het gewoon werkt. Omwille van performance redenen heb ik in dit voorbeeldje OpenGL support ingeschakeld op de QGraphicsView waardoor de graphics er wel iets minder "smooth" uitzien dan ze kunnen zijn moest het allemaal via software (QPainter) gaan. Maar dat was wel nodig, want een 1280x720 high-definition h264 film afspelen vereist sowieso al voldoende van je computer, laat staan dat we de film dan nog een beetje gaan animeren/vervormen...

Ik heb echt geen idee of er iets nuttigs gedaan kan worden met dit, en of het nog verder te optimaliseren valt, maar ik vind dit in ieder geval wel een nutteloze, maar leuke 'feature'.

De film die je ziet is natuurlijk Big Buck Bunny van het Open Movie project :) http://www.bigbuckbunny.org/
Gebruikte backend voor Phonon is GStreamer (default op Linux bij Qt 4.4)

Indien je trouwens meer wil weten over het transformeren/embedden van widgets in een QGraphicsView, bezoek dan deze pagina's op de Qt documentatie:

http://doc.trolltech.com/4.4/qt4-4-intro.html#widgets-in-graphics-view
http://doc.trolltech.com/4.4/graphicsview.html#widgets-and-layouts

Citaat
Through QGraphicsProxyWidget, Graphics View is able to deeply integrate the client widget features including its cursors, tooltips, mouse, tablet and keyboard events, child widgets, animations, pop-ups (e.g., QComboBox or QCompleter), and the widget's input focus and activation. QGraphicsProxyWidget even integrates the embedded widget's tab order so that you can tab in and out of embedded widgets. You can even embed a new QGraphicsView into your scene to provide complex nested scenes.

When transforming an embedded widget, Graphics View makes sure that the widget is transformed resolution independently, allowing the fonts and style to stay crisp when zoomed in. (Note that the effect of resolution independence depends on the style.)
en meer informatie over Phonon vind je op: http://doc.trolltech.com/4.4/phonon-overview.html
Human Knowledge Belongs To The World -- Antitrust (2001)
Nederlandstalige Ubuntu documentatie van Ubuntu-NL (wiki)

Offline profoX

  • Lid
    • wesley
    • Lionslink
Getransformeerde video's en widgets in Qt 4.4
« Reactie #1 Gepost op: 2008/06/10, 21:31:59 »
Hmm, een meer uitgewerkte demo :)

YouTube video: http://nl.youtube.com/watch?v=nZWHlVMe-u0&fmt=18

Human Knowledge Belongs To The World -- Antitrust (2001)
Nederlandstalige Ubuntu documentatie van Ubuntu-NL (wiki)

Getransformeerde video's en widgets in Qt 4.4
« Reactie #2 Gepost op: 2008/06/10, 21:43:12 »
Zet je die misschien ook op bliptv ?

Je kan in dit onderwerp van stani meer lezen over zijn bedoeling om zoveel mogelijk dingen te centraliseren...
Omwille van de besparingen hebben ze het licht aan het eind van de tunnel ook uitgedaan...

Offline profoX

  • Lid
    • wesley
    • Lionslink
Getransformeerde video's en widgets in Qt 4.4
« Reactie #3 Gepost op: 2008/06/10, 22:21:32 »
Qua videokwaliteit had ik dat misschien beter gedaan. 62 MB geüpload om dan zo'n lelijke YouTube video te bekomen... achja :)

Maar voor de rest zie ik geen reden om dit videootje te centraliseren op een videokanaal dat UbuntuBenelux heet.
Deze demovideo heeft in principe maar heel weinig te maken met Ubuntu, en het is al helemaal niet specifiek voor België, Nederland of Luxemburg bedoeld.

Indien je mij kan overtuigen van het nut van dit toch op bliptv te zetten... laat maar horen...
maar ik vind persoonlijk niet dat het thuishoort tussen al die Nederlandstalige presentaties van de HRP.
Human Knowledge Belongs To The World -- Antitrust (2001)
Nederlandstalige Ubuntu documentatie van Ubuntu-NL (wiki)

Getransformeerde video's en widgets in Qt 4.4
« Reactie #4 Gepost op: 2008/06/10, 22:38:14 »
profoX, ik ben helemaal niet bekend met Qt,QWidget en Phonon zou je in een simple bewoording uit kunnen leggen wat je aan het doen bent zodat een leek als ik het ook nog kan volgen?

Met vriendelijke groet,

Gijs
In der Beschränkung zeigt sich der Meister.

Offline profoX

  • Lid
    • wesley
    • Lionslink
Getransformeerde video's en widgets in Qt 4.4
« Reactie #5 Gepost op: 2008/06/10, 23:23:44 »
Citaat van: Gijsbert
profoX, ik ben helemaal niet bekend met Qt,QWidget en Phonon zou je in een simple bewoording uit kunnen leggen wat je aan het doen bent zodat een leek als ik het ook nog kan volgen?
Ik ben gewoon één en ander aan het uittesten.

Sinds versie 4.4 heeft Qt onder andere deze twee nieuwe dingen geïntroduceerd:
* Phonon Multimedia Framework
* Widgets on Graphics View

Phonon is een framework waarmee programmeurs simpele audio- en videoprogramma's kunnen schrijven door simpelweg een paar lijnen code te schrijven zonder moeilijke dingen te moeten doen. Phonon gebruikt op Linux GStreamer, op Windows DirectShow en op Mac QuickTime om op elk platform de beste performance te halen. Audio en video effecten of plug-ins kunnen eveneens worden toegevoegd, maar die zijn afhankelijk van hetgeen beschikbaar is op jouw platform.
Kort gezegd: Phonon maakt het weergeven van audio (geluid) en video (beeld) in je programma een eitje :)
Meer informatie over Phonon: http://doc.trolltech.com/4.4/phonon-overview.html

Met een Graphics View kan je verschillende objecten (van tekst, afbeeldingen, SVG, figuren, tot heel complexe objecten) in een virtuele ruimte plaatsen. Deze virtuele ruimte en/of alle objecten erin kunnen op eenvoudige wijze getransformeerd en geanimeerd worden. Dit maakt het mogelijk om zeer moderne grafische interfaces e.d. te ontwikkelen. Verder is ook vermeldenswaardig dat je, wanneer je deze animaties e.d. met behulp van Qt's eigen QPainter schrijft, ze werken op systemen zonder OpenGL, maar dat er automatisch (indien gewenst) gebruik gemaakt zal worden van OpenGL (en dus van hardwarematige beeldversnelling).
Meer informatie over de Graphics View: http://doc.trolltech.com/4.4/graphicsview.html
Meer informatie over het Paintsysteem: http://doc.trolltech.com/4.4/paintsystem.html

Sinds versie 4.4 kunnen op deze Graphics Views niet alleen hele complexe objecten gezet worden die je speciaal ontwikkelt voor de Graphics View, maar ook gewone widgets/vensters kunnen nu in die Graphics View geplaatst worden!

Aangezien Phonon video's rendert op een soort van QWidget wilde ik proberen om die widget in een Graphics View te plakken. Blijkbaar lukt dit zonder probleem :) Dat is waar ik mee bezig was...

Het nut van deze demo? Geen. Maar ik heb wel begrepen dat dankzij Qt 4.4 een hele waaier van nieuwe mogelijkheden mogelijk wordt wat betreft het ontwikkelen van moderne gebruikersinterfaces. Moest ik deze demo verder uitwerken zou ik bijvoorbeeld waarschijnlijk een vrij leuke Media Center kunnen ontwikkelen zonder diep in OpenGL te moeten graven. En dat komt door de integratie van normale widgets (waaronder video) naast andere QGraphicsItems, en dat alles volledig gerenderd in OpenGL zonder dat je zelf ook maar een enkele lijn OpenGL code moet schrijven...

Ja, oke, goed, dit is misschien geen simpele bewoording, maar het is dan ook meer bedoeld voor programmeurs die van plan zijn om er zelf eens mee te gaan knoeien.

Hoe zou ik het nog kunnen omschrijven? Dingen van een normale gebruikersinterface (knoppen, tekstvakken, lijsten, maar ook meer ingewikkelde widgets) maar dan allemaal in een 2.5-dimensionaal (geen 2D, maar ook geen echte 3D) vlak plaatsen, met de nodige hardwareversnelling en met leuke grafische effecten erbij, en dat allemaal zeer makkelijk te programmeren.

En hier nog een voorbeeldje van normale widgets/vensters in de Graphics View door de makers van Qt zelf:
http://nl.youtube.com/watch?v=TLbO73oQaeU
Human Knowledge Belongs To The World -- Antitrust (2001)
Nederlandstalige Ubuntu documentatie van Ubuntu-NL (wiki)

Jean_

  • Gast
Getransformeerde video's en widgets in Qt 4.4
« Reactie #6 Gepost op: 2008/06/15, 10:44:57 »
Profox, misschien weet jij iets. Waar ik naar op zoek ben is de opengl variant van setMask().
Een van mn projecten is een virtua girl speler, in windows werkt die perfect, in linux heeftie soms wat flikker. Wat me opviel is dat zo gauw ik de cube roteer, de flikker weg is, dus vandaar dat ik aan opengl ging denken. Maar al mn zoeken naar 2d opengl transparency heeft niks opgeleverd.
Btw succes met dat amsn 2 project, ziet er prima uit, ik ben zelf ondertussen wel gewend geraakt aan amsn, vind het niet eens zo lelijk meer, maar toch, goeie qt interface zou het stuk aantrekkelijker maken.

Offline profoX

  • Lid
    • wesley
    • Lionslink
Getransformeerde video's en widgets in Qt 4.4
« Reactie #7 Gepost op: 2008/06/15, 14:58:56 »
Als die Virtua Girl Speler open source is, wil ik het wel eens bekijken.
Die flikker heeft misschien met iets anders te maken...

Ik gok dat setMask() niet mogelijk is in OpenGL, omdat OpenGL volgens mij geen transparante delen kan hebben op je desktop.. Behalve dan als je gebruik maakt van een window manager met window compositing en je je app daarop afstelt...
Human Knowledge Belongs To The World -- Antitrust (2001)
Nederlandstalige Ubuntu documentatie van Ubuntu-NL (wiki)

Jean_

  • Gast
Getransformeerde video's en widgets in Qt 4.4
« Reactie #8 Gepost op: 2008/06/15, 16:14:04 »
Citaat van: profoX
Als die Virtua Girl Speler open source is, wil ik het wel eens bekijken.Die flikker heeft misschien met iets anders te maken...
Ik wil het eigenlijk wel opensource maken, alleen ik weet niet goed hoe het zit met de legale kant. Het is wel net materie waar nogal wat centen mee verdiend wordt. Wat betreft de code, ik heb ooit pascal code gevonden die ongeveer de runtime length encoding deed die vg nodig heeft en heb dat aangepast en de speler omheen gebouwd met transparantie etc.
En dan nog de distributie, ik kan het wel als qt project, .pro dus, ter download zetten, dat heb ik eerder gezien, zou bv voor jou geen probleem zijn.
Eerlijk gezegd ben ik best een beetje bang dat het populair wordt en ik meer aandacht krijg als me lief is. :)

Wat betreft de flikker, ik heb geprobeerd met ARGB te werken, is me echter niet gelukt, de plaatjes worden bovendien opgebouwd met rgb8bits, Format_Indexed8 dus, das 4 keer zo klein dus 4 keer zo snel als ARGB.
Flikker krijg je als de paintevent niet snel genoeg afgehandeld wordt, ik heb dus verschillende optimalisaties zitten doen en dat heeft wel geholpen. Maar tis nog niet watie in windows kan, daar kan ik tot 3 maal zoomen en heb nog geen flikker. Ik zoom standaard 2 keer, beter voor mijn ogen, maar kost dus weer extra tijd voor de display, 1 keer zoomen geeft nauwelijks flikker.

Citaat
Ik gok dat setMask() niet mogelijk is in OpenGL, omdat OpenGL volgens mij geen transparante delen kan hebben op je desktop.. Behalve dan als je gebruik maakt van een window manager met window compositing en je je app daarop afstelt...
Daar ben ik een beetje bang voor ja, ik heb niks kunnen vinden in die richting namelijk. Maar waarom verdwijnt alle flikker als ik de cube draai?

Offline profoX

  • Lid
    • wesley
    • Lionslink
Getransformeerde video's en widgets in Qt 4.4
« Reactie #9 Gepost op: 2008/06/17, 17:35:26 »
Jean_, vanwege je mailtje toch nog maar een reactie: Ik heb geen idee waarom de flikker verdwijnt als je de cube draait. En aangezien er geen source code aanwezig is, is het ook onmogelijk voor mij (of iemand anders) om het uit te testen.

Voor zover ik weet kan je transparantie (zonder masking) met ARGB pixmaps alleen maar bereiken (op Linux) als je een compositing window manager draait, zoals bv. compiz of kwin4. En daar heb je dan ook weer extra code voor nodig. Zoiets als dit: http://labs.trolltech.com/page/Graphics/Examples/Examples1 (let op: dit is al wel een voorbeeldje dat dateert uit 2006, ik weet niet of het een en ander ondertussen is veranderd..)
Human Knowledge Belongs To The World -- Antitrust (2001)
Nederlandstalige Ubuntu documentatie van Ubuntu-NL (wiki)