blob: e493cc4fcdd80f5e1c8f6d48fb61d16707196630 [file] [log] [blame]
# Copyright 2020 Project U-Ray Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import re
import sys
import json
# Usage: frames.txt tiles.txt tilegrid.json
frame_line_re = re.compile(r'0x([0-9A-Fa-f]+).*')
frame_rc_height = {}
with open(sys.argv[1], 'r') as f:
for line in f:
m = frame_line_re.match(line)
if not m:
continue
frame = int(m.group(1), 16)
bus = (frame >> 24) & 0x7
half = (frame >> 23) & 0x1
row = (frame >> 18) & 0x1F
col = (frame >> 8) & 0x3FF
minor = frame & 0xFF
if bus != 0 or half != 0:
continue
if (row, col) not in frame_rc_height:
frame_rc_height[(row, col, frame & ~0xFF)] = minor + 1
else:
frame_rc_height[(row, col, frame & ~0xFF)] = max(frame_rc_height[(row, col)], minor + 1)
tiles_to_xy = {}
with open(sys.argv[2], 'r') as tilef:
for line in tilef:
sl = line.strip().split(",")
if len(sl) < 4:
continue
x = int(sl[0])
y = int(sl[1])
name = sl[2]
tiles_to_xy[name] = (x, y)
with open(sys.argv[3]) as tb_f:
tbj = json.load(tb_f)
frames_to_tiles = {}
for tilename, tiledata in tbj.items():
tile_offset = 0
for chunk in tiledata:
frame, start, size = chunk
if frame not in frames_to_tiles:
frames_to_tiles[frame] = []
name = tilename.split(":")[0]
frames_to_tiles[frame].append((start, tiles_to_xy[name][1], tiles_to_xy[name][0], name))
tile_offset += size
for frame, tiles in frames_to_tiles.items():
tiles.sort()
for rc, height in sorted(frame_rc_height.items()):
row, col, frame = rc
line = "%08x %6d %6d %6d" % (frame, row, col, height)
print(line)
frame = (row << 18) | (col << 8)
last_start = 0;
if frame in frames_to_tiles and len(frames_to_tiles[frame]) > 0:
for tile in frames_to_tiles[frame]:
start, ty, tx, tname = tile
print(" %6d (%4d) %6d %6d %s" % (start, start - last_start, tx, ty, tname))
last_start = start