Skip to content

Commit 22890f3

Browse files
jannaumarcan
authored andcommitted
experiments: Optimize bad apple video playback
Let ffmpeg rotate, align to stride and convert to RGBA. Do not allocate a framebuffer for every frame. Signed-off-by: Janne Grunau <[email protected]>
1 parent 5681036 commit 22890f3

3 files changed

Lines changed: 29 additions & 17 deletions

File tree

proxyclient/experiments/touchbar_apple_prepare.sh

100644100755
Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#!/bin/bash
22

3-
yt-dlp 'https://www.youtube.com/watch?v=UkgK8eUdpAo'
4-
ffmpeg -i *.webm -vf scale=80:60 crushed.mkv
5-
ffmpeg -i crushed.mkv -f rawvideo -pix_fmt rgb24 out.bin
3+
if [ ! -f bad_apple.webm ] ; then
4+
yt-dlp -o bad_apple 'https://www.youtube.com/watch?v=UkgK8eUdpAo'
5+
fi
6+
7+
ffmpeg -i bad_apple.webm -vf scale=80:60,rotate='PI/2:oh=iw:ow=ih+4' -f rawvideo -pix_fmt rgba -y out.bin

proxyclient/experiments/touchbar_bad_apple.py

100644100755
Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
#!/usr/bin/env python3
2+
3+
import sys, pathlib
4+
sys.path.append(str(pathlib.Path(__file__).resolve().parents[1]))
5+
6+
from m1n1.setup import *
17
from m1n1.hw.dart import DART
28
from m1n1.utils import *
39

@@ -8,7 +14,7 @@
814
stride = 64
915

1016
def make_fb():
11-
width = 80
17+
width = 2040
1218
fb_size = align_up(width * stride * 4, 8 * 0x4000)
1319
buf = u.memalign(0x4000, fb_size)
1420
return (dart.iomap(0, buf, fb_size), buf)
@@ -73,20 +79,18 @@ def flush(pipe):
7379
for i in pipe:
7480
p.write32(0x2282010c0, i)
7581

76-
data = open('out.bin', 'rb').read()
77-
def play():
82+
def play(f):
7883
frame = 0
79-
while 1:
80-
iova, base = make_fb()
81-
for y in range(60):
82-
for x in range(80):
83-
pix = data[(x + y * 80 + frame * 80 * 60) * 3]
84-
pos = base + ((60 - y) + x * 64) * 4
85-
if pix < 128:
86-
p.write32(pos, 0)
87-
else:
88-
p.write32(pos, 0x00FFFFFF)
84+
iova, base = make_fb()
85+
while True:
86+
data = f.read(80 * 64 * 4)
87+
if not data:
88+
break
89+
for i in range(25):
90+
iface.writemem(base + i * 80 * 64 * 4, data)
8991
flush(make_pipe(iova))
92+
time.sleep(0.033)
9093
frame += 1
9194

92-
play()
95+
with open('out.bin', 'rb') as f:
96+
play(f)

proxyclient/experiments/touchbar_rainbow.py

100644100755
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
#!/usr/bin/env python3
2+
3+
import sys, pathlib
4+
sys.path.append(str(pathlib.Path(__file__).resolve().parents[1]))
5+
6+
from m1n1.setup import *
17
from m1n1.hw.dart import DART
28
from m1n1.utils import *
39

0 commit comments

Comments
 (0)