PkBadApple/encoder/play.py

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()