37 lines
959 B
Python
37 lines
959 B
Python
import time
|
|
from typing import IO
|
|
from common import *
|
|
|
|
|
|
def decode_frame(f: IO[bytes], last_frame: list[list[bool]]) -> list[list[bool]]:
|
|
pixels = []
|
|
while len(pixels) < res[0]*res[1]:
|
|
count = int.from_bytes(f.read(1), "little")
|
|
# high bit stores value
|
|
val = bool(count & 1)
|
|
cnt = count >> 1
|
|
for _ in range(cnt):
|
|
pixels.append(val)
|
|
# reshape to res
|
|
pixels = [pixels[i:i+res[0]] for i in range(0, len(pixels), res[0])]
|
|
|
|
# apply diff
|
|
if last_frame:
|
|
pixels = diff(last_frame, pixels)
|
|
return pixels
|
|
|
|
def run_encoded():
|
|
f = open("out_diff.bin", "rb")
|
|
last_frame = None
|
|
while True:
|
|
t1 = time.time()
|
|
pixels = decode_frame(f, last_frame)
|
|
if len(pixels) == 0:
|
|
break
|
|
last_frame = pixels
|
|
print_frame(pixels)
|
|
t2 = time.time()
|
|
time.sleep(1/24 - (t2-t1))
|
|
|
|
if __name__ == "__main__":
|
|
run_encoded() |