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:
Fischlurch 2026-07-17 18:59:57 +02:00
parent 0cda45278c
commit b92977883c
3 changed files with 222 additions and 12 deletions

View file

@ -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 &#x27f9; 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 &#x27f9; getrieben vom Timer-Tick">
<icon BUILTIN="idea"/>
</node>
<node CREATED="1784076700200" ID="ID_1239755482" MODIFIED="1784076707103" TEXT="Daten&#xfc;bergabe / Sichtbarkeit">
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1784076700200" ID="ID_1239755482" MODIFIED="1784307048562" TEXT="Daten&#xfc;bergabe / Sichtbarkeit">
<node CREATED="1784076715698" ID="ID_102034340" MODIFIED="1784076740355" TEXT="Dispatcher &#xfc;bertr&#xe4;gt nur den Trigger &#xfc;ber die Thread-Grenzen"/>
<node CREATED="1784076755543" ID="ID_1514914957" MODIFIED="1784076772757" TEXT="mu&#xdf; Atomics / Barrieren einf&#xfc;hren f&#xfc;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 &#xf6;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&#xfc;ckisches Korrektheits-Problem hier">
<node BACKGROUND_COLOR="#efd6b7" COLOR="#690f14" CREATED="1784166503838" ID="ID_645230473" MODIFIED="1784307041196" TEXT="Bei genauerer Betrachtung : t&#xfc;ckisches Korrektheits-Problem hier">
<icon BUILTIN="broken-line"/>
<node CREATED="1784166547264" ID="ID_225348495" MODIFIED="1784166564736" TEXT="und zwar k&#xf6;nnte der GUI-Thread &#xfc;berlastet sein, und die Daten nicht rechzeitig abholen"/>
<node CREATED="1784166577960" ID="ID_1754845143" MODIFIED="1784166592939" TEXT="damit k&#xf6;nnte der n&#xe4;chste Tick passieren, w&#xe4;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&#223; 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 &#xbb;Hingucker&#xab;">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Idealerweise sollte man f&#252;r diese Demo nichts weiter erl&#228;utern m&#252;ssen &#8212; und es sollte auf einer anderen Ebene nochmal <i>eine Closure erzeugen. </i>
</p>
<p>
</p>
<p>
Es handelt sich um einen &#187;Zaubertrick&#171;, erfordert also implizites Framing; beim Vortrag 2025 hat das nicht funktioniert, was m.E. daran lag da&#223; Benny an der Stelle immer so ungeschickt auf der festen Fenstergr&#246;&#223;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&#252;r sinnvoll. Eine ersichtlich <i>handgemachte</i>&#160; Aufnahme ist &#187;ein Video&#171; im betonten Sinn, es pa&#223;t in meinen Rhythmus und Stil, und ich hab trivialerweise die Rechte am Bild (letzteres k&#246;nnte problematisch sein bei einem &#246;ffentlich inszenierten Feuerwerk, d.h. die Aufnahme mu&#223; 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&#223; 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&#228;re dann aber eine l&#228;ngere Sequenz, beginnend mit den goldgelben Garben am untern Bildrand, und dann ein Bouquet aus gro&#223;en Kugeln, die ihre Farbe von Blau &#252;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 &#187;Rot-Gr&#252;n&#171; &#252;berzeugend eingesetzt ist und nicht blo&#223; &#8222;bunt&#8220; 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&#246;nnte es &#196;rger geben, wenn jemand erkennbar prominent im Bild ist. Bei der bezeichneten Szene w&#228;re das vor 1:15 der Fall, wo mehrere Leute direkt im Vordergrund Gruppen-Selfies machen; das k&#246;nnte man m.E. unbesorgt einsetzen, wenn man die Gesamt-Szene zeigt, aber f&#252;r einen kurzen Ausschnitt sollte ich besser vorsichtig sein. Daher w&#228;hle ich die n&#228;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&#252;ssig nach links durch eine gut gelaunte Menschenmenge, eine Gruppe mit Wunderkerzen, eine Steinskulptur, dahinter die Flu&#223;br&#252;cke randvoll mit einer Menschenmasse und ein irres Feuerwerk dar&#252;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&#xdf; nicht weiter suchen">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
(ich h&#228;tte schon eine Menge mehr, aber das hier erf&#252;llt bereits alles, was ich mir im Kontext hier w&#252;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 &#xe0; 50fps &#x2259; 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&#xf6;&#xdf;e: 1920 x 1080 &#x27fc; 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 &quot;scale=1200:675,format=rgb24&quot; -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&#160;&#160;&#8793; <b><font color="#890707">2.3</font></b><font color="#890707">&#160; 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&#xfc;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 &#x2014; schon funktioniert&apos;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 &#x2014; schon funktioniert&apos;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&#xe4;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>&#160;<i>l&#228;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>

View file

@ -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, &timespec, /*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);

View file

@ -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&)>;