m1n1/proxyclient/experiments/avd_fw.py

64 lines
2.1 KiB
Python
Raw Normal View History

#!/usr/bin/env python3
# SPDX-License-Identifier: MIT
import sys, pathlib, argparse
sys.path.append(str(pathlib.Path(__file__).resolve().parents[1]))
sys.path.append("/home/eileen/asahi/avd") # git clone https://github.com/eiln/avd.git
# Decode via AVD Cortex-M3 firmware
from m1n1.setup import *
from m1n1.utils import *
from m1n1.fw.avd import *
import cv2
from avd_emu import AVDEmulator
from avid.h264.decoder import AVDH264Decoder
from avid.vp9.decoder import AVDVP9Decoder
from avid.utils import *
from tools.common import *
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument('-f','--firmware', type=str, default="data/fw.bin", help="path to CM3 firmware")
parser.add_argument('-i','--input', type=str, required=True, help="path to CM3 firmware")
parser.add_argument('-d','--dir', type=str, required=True, help="frame_params trace dir")
parser.add_argument('-p', '--poll', action='store_true', help="poll iommu space")
args = parser.parse_args()
paths = os.listdir(os.path.join(args.dir))
paths = sorted([os.path.join(args.dir, path) for path in paths if "frame" in path])
assert(len(paths))
avd = AVDDevice(u)
avd.decoder = AVDVP9Dec(avd)
avd.boot()
avd.mcpu_decode_init(args.firmware)
avd.poll()
avd.ioalloc_at(0x0, 0xff0000, stream=0)
if (args.poll):
avd.iomon.add(0x0, 0xff0000)
avd.ioalloc_at(0x0, 0xb84000, stream=1)
avd.iomon.poll()
emu = AVDEmulator(args.firmware, stfu=True)
emu.start()
dec = AVDVP9Decoder()
dec.stfu = True
dec.hal.stfu = True
units = dec.setup(args.input, num=4, do_probs=True)
for n,unit in enumerate(units):
inst = dec.decode(unit)
avd.decoder.set_payload(dec.ctx, units[n])
avd.decoder.avd.iowrite(dec.ctx.probs_addr, unit.get_probs(), stream=0)
avd.iomon.poll()
cmd = emu.set_params(paths[n])
xxde(cmd)
avd.iowrite(0x0, emu.dart1_space, stream=1)
avd.iomon.poll()
avd.avd_wbuf(emu.get_cmd_addr(n), cmd)
avd.avd_w32(0x1098054, emu.get_cmd_addr(n))
avd.poll()
avd.iomon.poll()
img = avd.decoder.get_nv12_disp_frame(dec.ctx)
cv2.imshow(avd.decoder.winname, img); cv2.waitKey(1)