[ Webhosting ProFiTux.cz ] [ NeoCube kuličky ] [ Design interierů ] [ mp3 zdarma ] [ Permanentní make-up ] [ Hračky Bruder ] [ Sun-shop ] [ Zlepšete si handicap! ] [ Mexická (prasečí) chřipka ] [ Výklad karet ]
[ miniJob.cz - pracovní příležitosti ] [ Velká prsa ] [ www.bruder-lego.cz ] [ dovolená, lastminute ] [ Sex po telefonu 100% živě ] [ Studentský časopis PROSTOR ] [ POSILOVACÍ STROJE ] [ Věštění po telefonu ] [ Mahjong Online ]

jakubův notes – programování a vejšplechty

Píšu o:

shower – prezentace s videy

Hledal jsem nějakou elegantní možnost, jak udělat prezentace s vloženými videy. OpenOffice.org Impress cosi pořád kecal o kodecích a nechtělo se mi to řešit. Pravděpodobně by to nějak šlo s LaTeX Beamerem vložením videa do PDF. Beamer může být skvělá věc, ale nechtělo se mi laborovat s tím, jak tam vytvořit vlastní téma, protože žádné z výchozích se mi pro danou prezentaci nezdá.

Nakonec jsem skončil u osvědčené (pro většinu lidí asi trochu brute-force a ani ne moc elegantní) kombinace Qt + mplayer a naprogramování si prohlížedla přesně na míru. Qt spolu s mplayerem jsem už jednou úspěsně použil; pro dvb-starter. A protože jsem narazil na způsob, jak mplayer vložit přímo do Qt widgetu (shodou okolností nemůžu to fórum, kde jsem to našel, znovu objevit), nic nestálo v cestě se na to vrhnout.

Embedding (krásné to slovo) mplayeru v Xkách je velice jednoduché – stačí mu přes volbu -wid následovanou číslem Xkového okna (v Xkách je oknem prakticky všechno; ve většině toolkitů je snad každý widget reprezentovám Xkovým oknem) předat, kam má video vykreslovat. Problém byl v tom, že mplayer video roztáhne na celé okno – a tedy je povětšinou deformované. Naprostá souhra náhod tomu dala a já otevřel dnes jeden post na jednom blogu na Abclinuxu a tam přesně to, co jsem potřeboval – přidání černých pruhů kolem videa pomocí filtru (-vf) expand. Věc je pak úplně jednoduchá (spustí přehrávání video.avi v daném widgetu):

QProcess *mplayer = new QProcess(widget);

mplayer->start(
    "mplayer", QStringList() <<
    "-wid" << QString::number(widget->winId()) <<
    "-slave" <<
    "-vf" << QString("expand=:::::%1").arg((double) widget->width() / widget->height()) <<
    "video.avi"
);

Metoda winId() vrací číslo Xkového okna, které se převede na řezězec a předá spouštěnému mplayeru, čímž řekneme, že má video vykreslovat do daného widgetu. Video filter expand bere několik parametrů (jako je pozice x, y; šířka, výška apod.). Důležitý je ale poslední – desetinné číslo specifikující poměr stran. Ostatní parametry se doplní, aby to vycházelo co nejlépe (největší možná velikost, vycentrované umístění…).

Jak tohle člověk má, stačilo přidat vykreslování obrázkových slajdů a shower byl na světě. Jak jinak než, že kód je na GitHubu:

$ git clone git://github.com/jakubkulhan/shower.git

Doufám v co nejmenší počet SEGFAULTů při prezentaci :-)

vydáno 20. 9. 2009, 16:27:00

žádný komentář

Zařazeno mezi: