Prototype: Playback parameters for a 1200px-50fps video
Search for suitable footage to show in the demo: Using a scene from New-Year 2023/24 at the Munich "Reichenbachbrücke"
This commit is contained in:
parent
0cda45278c
commit
b92977883c
3 changed files with 222 additions and 12 deletions
|
|
@ -1972,11 +1972,12 @@
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1783644425567" ID="ID_238189215" MODIFIED="1783644429274" TEXT="Flow-Steuerung">
|
||||
<node CREATED="1784052955974" ID="ID_1491751742" MODIFIED="1784052978769" TEXT="da nun Proactor ⟹ getrieben vom Timer-Tick">
|
||||
<node COLOR="#434698" CREATED="1783644425567" ID="ID_238189215" MODIFIED="1784307069166" TEXT="Flow-Steuerung">
|
||||
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
|
||||
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1784052955974" ID="ID_1491751742" MODIFIED="1784307052218" TEXT="da nun Proactor ⟹ getrieben vom Timer-Tick">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node CREATED="1784076700200" ID="ID_1239755482" MODIFIED="1784076707103" TEXT="Datenübergabe / Sichtbarkeit">
|
||||
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1784076700200" ID="ID_1239755482" MODIFIED="1784307048562" TEXT="Datenübergabe / Sichtbarkeit">
|
||||
<node CREATED="1784076715698" ID="ID_102034340" MODIFIED="1784076740355" TEXT="Dispatcher überträgt nur den Trigger über die Thread-Grenzen"/>
|
||||
<node CREATED="1784076755543" ID="ID_1514914957" MODIFIED="1784076772757" TEXT="muß Atomics / Barrieren einführen für die Datensicherheit"/>
|
||||
<node BACKGROUND_COLOR="#accdc3" COLOR="#010101" CREATED="1784076776201" ID="ID_1043516833" MODIFIED="1784076975728" STYLE="fork" TEXT="Vorschlag von Claude: die State-Machine als Atomic implementieren">
|
||||
|
|
@ -2185,7 +2186,7 @@
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1784143662545" ID="ID_1198363494" MODIFIED="1784143666308" TEXT="Event-Handler">
|
||||
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1784143662545" ID="ID_1198363494" MODIFIED="1784307056010" TEXT="Event-Handler">
|
||||
<node COLOR="#338800" CREATED="1784143667543" ID="ID_1705410666" MODIFIED="1784152302590" TEXT="Setup der Event-Verarbeitung">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1784143709139" ID="ID_1508199132" MODIFIED="1784151704956" TEXT="File öffnen">
|
||||
|
|
@ -2305,7 +2306,7 @@
|
|||
</html></richcontent>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fafe99" COLOR="#fa002a" CREATED="1784166503838" ID="ID_645230473" MODIFIED="1784166532804" TEXT="Bei genauerer Betrachtung : tückisches Korrektheits-Problem hier">
|
||||
<node BACKGROUND_COLOR="#efd6b7" COLOR="#690f14" CREATED="1784166503838" ID="ID_645230473" MODIFIED="1784307041196" TEXT="Bei genauerer Betrachtung : tückisches Korrektheits-Problem hier">
|
||||
<icon BUILTIN="broken-line"/>
|
||||
<node CREATED="1784166547264" ID="ID_225348495" MODIFIED="1784166564736" TEXT="und zwar könnte der GUI-Thread überlastet sein, und die Daten nicht rechzeitig abholen"/>
|
||||
<node CREATED="1784166577960" ID="ID_1754845143" MODIFIED="1784166592939" TEXT="damit könnte der nächste Tick passieren, während der GUI-Thread grade arbeitet"/>
|
||||
|
|
@ -2487,6 +2488,199 @@
|
|||
<icon BUILTIN="wizard"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1784304949037" ID="ID_519850342" MODIFIED="1784304954254" TEXT="demovideo-320.raw">
|
||||
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1784297356802" ID="ID_1171942440" MODIFIED="1784297365626" TEXT="Test-2: ein HD-Video">
|
||||
<node CREATED="1784297366839" ID="ID_760634306" MODIFIED="1784297370218" TEXT="Idee: Feuerwerk">
|
||||
<node CREATED="1784297376716" ID="ID_260423797" MODIFIED="1784297399265" TEXT="ist abstrakt genug">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...so daß es ohne Kontext sofort erkennbar ist
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1784297400412" ID="ID_1396606851" MODIFIED="1784297467112" TEXT="wirkt auf verschiedener Skala">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
wer hinten sitzt oder nur den Livestream sieht, bekommt ein stark reduziertes Bild mit schlechtem Kontrast
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1784297478369" ID="ID_1211159911" MODIFIED="1784297928984" TEXT="wirkt als »Hingucker«">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Idealerweise sollte man für diese Demo nichts weiter erläutern müssen — und es sollte auf einer anderen Ebene nochmal <i>eine Closure erzeugen. </i>
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<p>
|
||||
Es handelt sich um einen »Zaubertrick«, erfordert also implizites Framing; beim Vortrag 2025 hat das nicht funktioniert, was m.E. daran lag daß Benny an der Stelle immer so ungeschickt auf der festen Fenstergröße herumgeritten ist, und ich das nicht realisiert und rechtzeitig aufgegriffen habe
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1784297929880" ID="ID_1630754208" MODIFIED="1784297934611" TEXT="suche Material">
|
||||
<node CREATED="1784297943166" ID="ID_488286955" MODIFIED="1784298188764" TEXT="eigenes Material verwenden">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Das halte ich auf verschiedenen Ebenen für sinnvoll. Eine ersichtlich <i>handgemachte</i>  Aufnahme ist »ein Video« im betonten Sinn, es paßt in meinen Rhythmus und Stil, und ich hab trivialerweise die Rechte am Bild (letzteres könnte problematisch sein bei einem öffentlich inszenierten Feuerwerk, d.h. die Aufnahme muß sofort ersichtlich einen dokumentarischen Charakter haben)
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1784298190694" ID="ID_104068729" MODIFIED="1784298241702" TEXT="Sommernachtstraum-2024">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Das war ein ganz selten herausragendes Feuerwerk, und ich erinnere mich daß mir einige sehr gut abgeschlossene Sequenzen gelungen sind
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
<node CREATED="1784298243470" ID="ID_396338130" MODIFIED="1784298274562" TEXT="Lumix/vidzzz/"/>
|
||||
<node CREATED="1784298326663" ID="ID_125254865" MODIFIED="1784298916848" TEXT="00535.mts">
|
||||
<node CREATED="1784299006300" ID="ID_539210641" MODIFIED="1784299124443" TEXT="ab 0:15">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
nach einem typischen Bouquet brechen an mehreren Stellen hell leuchtende orange-rote Kugeln auf, zuletzt sogar ganz vom Boden her; dabei wird die umgebende Szenerie am Olympiaberg einen Augenblick lang sichtbar. Diese Sequenz ist sehr kurz und kann gelooped werden
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1784299320547" ID="ID_788676623" MODIFIED="1784299379983" TEXT="ab 4:05">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...das wäre dann aber eine längere Sequenz, beginnend mit den goldgelben Garben am untern Bildrand, und dann ein Bouquet aus großen Kugeln, die ihre Farbe von Blau über Rot entfalten. Klassisches Feuerwerk
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1784298340820" ID="ID_1114649715" MODIFIED="1784298919194" TEXT="00536.mts">
|
||||
<node CREATED="1784299605622" ID="ID_731311262" MODIFIED="1784299746166" TEXT="1:35 - 2:20">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
das ist die charakteristischte und dichteste Sequenz in diesem Feuerwerk gewesen; ein seltener Fall in dem die Kombination »Rot-Grün« überzeugend eingesetzt ist und nicht bloß „bunt“ wirkt
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1784299495478" ID="ID_913177207" MODIFIED="1784299741304" TEXT="ab 3:00">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
auch das eine ehr langsame und zeitlose Sequenz; besonders im Zusammenspiel mit den Pulverwolken und Spuren am Ende
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1784298343553" ID="ID_971255026" MODIFIED="1784298374127" TEXT="Silvester-2023">
|
||||
<node CREATED="1784298243470" ID="ID_340204401" MODIFIED="1784298274562" TEXT="Lumix/vidzzz/"/>
|
||||
<node BACKGROUND_COLOR="#e6e4b0" CREATED="1784298326663" ID="ID_1952065564" MODIFIED="1784299846209" TEXT="00444.mts">
|
||||
<icon BUILTIN="back"/>
|
||||
<node CREATED="1784298445620" ID="ID_1080755886" MODIFIED="1784298452200" TEXT="ab ~ 1:15"/>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1784298592488" ID="ID_735279780" MODIFIED="1784298826077" TEXT="auf identifizierbare Personen achten">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Wegen dem Recht am Bild. Zwar ist die Rechtslage in Deutschland eindeutig (Panoramafreiheit sowie Geschehen der relativen Zeitgeschichte), jedoch könnte es Ärger geben, wenn jemand erkennbar prominent im Bild ist. Bei der bezeichneten Szene wäre das vor 1:15 der Fall, wo mehrere Leute direkt im Vordergrund Gruppen-Selfies machen; das könnte man m.E. unbesorgt einsetzen, wenn man die Gesamt-Szene zeigt, aber für einen kurzen Ausschnitt sollte ich besser vorsichtig sein. Daher wähle ich die nächste Sequenz, in der selbst in der Gruppe mit den Wunderkerzen keine Gesichter prominent erkennbar sind
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1784298493000" ID="ID_403555231" MODIFIED="1784298588968" TEXT="da ist mir eine zetlose Szene gelungen">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Die Kamera bewegt sich flüssig nach links durch eine gut gelaunte Menschenmenge, eine Gruppe mit Wunderkerzen, eine Steinskulptur, dahinter die Flußbrücke randvoll mit einer Menschenmasse und ein irres Feuerwerk darüber, schon halb im Pulverdampf
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1784299751980" ID="ID_278948854" MODIFIED="1784299826938" TEXT="das isses! muß nicht weiter suchen">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
(ich hätte schon eine Menge mehr, aber das hier erfüllt bereits alles, was ich mir im Kontext hier wünsche)
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1784301781426" ID="ID_167806190" MODIFIED="1784301793830" TEXT="extrahieren: 1:18 - 1:38">
|
||||
<node CREATED="1784301815838" ID="ID_919961155" MODIFIED="1784302154962" TEXT="20sec à 50fps ≙ 1000 Frames"/>
|
||||
<node CREATED="1784302490121" ID="ID_278799818" MODIFIED="1784302496324" TEXT="ffmpeg -r 50 -i ~/Platz/Lumix/vidzzz/00444.mts -ss 0:1:18 -vframes 1000 -vcodec copy -an test.mkv"/>
|
||||
<node CREATED="1784302618850" ID="ID_72123433" MODIFIED="1784302721968" TEXT="Originalgröße: 1920 x 1080 ⟼ 675 RAW in RGB24"/>
|
||||
<node CREATED="1784302728769" ID="ID_46873234" MODIFIED="1784303613645" TEXT="ffmpeg -r 50 -i ~/Platz/Lumix/vidzzz/00444.mts -ss 0:1:18 -vframes 1000 -an -vf "scale=1200:675,format=rgb24" -f rawvideo -pix_fmt rgb24 demovideo-1200.raw"/>
|
||||
<node CREATED="1784303736468" ID="ID_1648226456" MODIFIED="1784306990152">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
bitrate=972000.0kbits/s video:2373047KiB  ≙ <b><font color="#890707">2.3</font></b><font color="#890707">  GiB</font>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
<linktarget COLOR="#5bfe3a" DESTINATION="ID_1648226456" ENDARROW="Default" ENDINCLINATION="-269;14;" ID="Arrow_ID_1321145390" SOURCE="ID_1577242171" STARTARROW="None" STARTINCLINATION="238;17;"/>
|
||||
</node>
|
||||
<node CREATED="1784304034683" ID="ID_428549034" MODIFIED="1784304887052" TEXT="anzeigen mit...">
|
||||
<icon BUILTIN="idea"/>
|
||||
<node CREATED="1784304051481" ID="ID_1707477874" MODIFIED="1784304052333" TEXT="ffplay -f rawvideo -pixel_format rgb24 -video_size 1200x675 -framerate 50 demovideo-1200.raw"/>
|
||||
<node CREATED="1784304855337" ID="ID_419748946" MODIFIED="1784304884718" TEXT="vlc --demux rawvideo --rawvid-width=1200 --rawvid-height=675 --rawvid-fps=50 --rawvid-chroma=RV24 --vout=opengl demovideo-1200.raw">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
--vout war notwendig, da der Default (VDPAU) mit anscheinend mit dem Pixelformat nicht zurechtkommt
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1784304971029" ID="ID_1008974035" MODIFIED="1784305013409" TEXT="das Fenster ist deutlich kleiner als der Desktop und spielt flüssig ab (selbst von Magnitic-Disk)">
|
||||
<icon BUILTIN="info"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1784304949037" ID="ID_1089334463" MODIFIED="1784304964219" TEXT="demovideo-1200.raw">
|
||||
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1784228106784" ID="ID_1212494407" MODIFIED="1784229520498" STYLE="fork" TEXT="Segfault">
|
||||
|
|
@ -2570,7 +2764,7 @@
|
|||
<icon BUILTIN="broken-line"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#174956" COLOR="#8dfd49" CREATED="1784239367168" HGAP="13" ID="ID_790023827" MODIFIED="1784239428069" STYLE="bubble" TEXT="Kaum macht mans richtig — schon funktioniert's" VSHIFT="12">
|
||||
<node BACKGROUND_COLOR="#174956" COLOR="#8dfd49" CREATED="1784239367168" HGAP="13" ID="ID_790023827" MODIFIED="1784239826448" STYLE="bubble" TEXT="Kaum macht mans richtig — schon funktioniert's" VSHIFT="12">
|
||||
<edge COLOR="#61fe5b" STYLE="bezier" WIDTH="thin"/>
|
||||
<font NAME="SansSerif" SIZE="14"/>
|
||||
<node COLOR="#054262" CREATED="1784239826448" ID="ID_273149802" MODIFIED="1784239872263" STYLE="fork" TEXT="auch getested: schnellere Wiedergabe">
|
||||
|
|
@ -2582,6 +2776,19 @@
|
|||
<node COLOR="#054262" CREATED="1784239826448" ID="ID_1233113947" MODIFIED="1784239901209" STYLE="fork" TEXT="getested: Fenster verschieben während Widergabe">
|
||||
<font NAME="SansSerif" SIZE="11"/>
|
||||
</node>
|
||||
<node COLOR="#054262" CREATED="1784239826448" ID="ID_1577242171" MODIFIED="1784307006942" STYLE="fork">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Wiedergabe von <b>972000 kBit/s</b> <i>läuft glatt</i>
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<arrowlink COLOR="#5bfe3a" DESTINATION="ID_1648226456" ENDARROW="Default" ENDINCLINATION="-269;14;" ID="Arrow_ID_1321145390" STARTARROW="None" STARTINCLINATION="238;17;"/>
|
||||
<font NAME="SansSerif" SIZE="11"/>
|
||||
<icon BUILTIN="back"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
|
|||
|
|
@ -30,10 +30,10 @@ using std::chrono::operator ""ms;
|
|||
//-----------------hard-coded-config--
|
||||
const size_t RING_SIZ = 5;
|
||||
const string RAW_VIDEO_INPUT_FILE = "demovideo.raw";
|
||||
const uint VIDEO_WIDTH = 320;
|
||||
const uint VIDEO_HEIGHT = 240;
|
||||
const size_t START_FRAME = 0;
|
||||
const size_t MAX_LOOP_FRAME = 30 * 25;
|
||||
const uint VIDEO_WIDTH = 1200;
|
||||
const uint VIDEO_HEIGHT = 675;
|
||||
const size_t START_FRAME = 40;
|
||||
const size_t MAX_LOOP_FRAME = 960;
|
||||
|
||||
auto calcSrcFrame = [](size_t runningNr){ return START_FRAME + runningNr % MAX_LOOP_FRAME; };
|
||||
|
||||
|
|
@ -147,7 +147,7 @@ UringVideoPlayer::playVideo()
|
|||
|
||||
// Setup periodic frame beat, firing infinitely
|
||||
const auto TICK_TAG = UINT64_MAX; // special marker for timer events (differs from possible frame numbers)
|
||||
auto timespec = asKernelTimespec (40ms); // 25fps ≙ 40ms per frame
|
||||
auto timespec = asKernelTimespec (20ms); // 50fps ≙ 20ms per frame
|
||||
io_uring_sqe* timerSubmission{io_uring_get_sqe (&uRing)};
|
||||
io_uring_prep_timeout (timerSubmission, ×pec, /*no count limit*/ 0, IORING_TIMEOUT_MULTISHOT);
|
||||
io_uring_sqe_set_data64(timerSubmission, TICK_TAG);
|
||||
|
|
@ -311,6 +311,7 @@ unique_ptr<UringVideoPlayer>
|
|||
launchPlayer (Gtk::Window& appWindow)
|
||||
{ // force minimum size to fit the player...
|
||||
appWindow.set_size_request (VIDEO_WIDTH, VIDEO_HEIGHT);
|
||||
appWindow.set_title ("powered by io_uring");
|
||||
appWindow.set_resizable (false);
|
||||
|
||||
return std::make_unique<UringVideoPlayer> (appWindow);
|
||||
|
|
|
|||
|
|
@ -62,7 +62,9 @@ class GtkUringApp
|
|||
public:
|
||||
GtkUringApp (ustring appID)
|
||||
: Gtk::Application{appID}
|
||||
{ }
|
||||
{
|
||||
demoWindow_.set_title (appID);
|
||||
}
|
||||
|
||||
|
||||
using StartTask = std::function<unique_ptr<CTX>(Gtk::Window&)>;
|
||||
|
|
|
|||
Loading…
Reference in a new issue