mirror of
https://github.com/KrisKennaway/ii-vision.git
synced 2024-12-22 12:29:31 +00:00
f3d03a1b87
make_edit_distance - use MASKED_DOTS since it does not have a simple relationship to the HEADER_BITS/BODY_BITS for HGR - try disabling transposition distances for Damerau-Levenshtein, this may give better quality screen - introduce separate notion of MASKED_DOTS which is the number of (coloured) pixels we can extract from MASKED_BITS. For HGR this is not the same. - fix bug in _fix_array_neighbours that was not fixing headers for HGR - don't cache everything in byte_pair_differences, it's effectively unbounded. Using 1M for LRU size seems to work just as well in practise, without leaking memory. - fix bug in _diff_weights when comparing content, we want to evaluate the effect of storing content byte in each offset separately, not cumulatively. - add a consistency check function (not currently wired up) to assert that headers/footers are in sync across columns - HGR should have 16 body bits, this was causing headers not to propagate correctly to/from neighbouring column - add test case for this bug video - Use 8 random bits consistently, using 16 in some places may have introduced bias - ignore palette bit when comparing 0x00 and 0x7f in sanity check
84 lines
2.4 KiB
Python
84 lines
2.4 KiB
Python
"""Tests for the video module."""
|
|
|
|
import unittest
|
|
|
|
import frame_grabber
|
|
import palette
|
|
import screen
|
|
import video
|
|
import video_mode
|
|
|
|
|
|
class TestVideo(unittest.TestCase):
|
|
def test_diff_weights(self):
|
|
fs = frame_grabber.FrameGrabber(mode=video_mode.VideoMode.DHGR)
|
|
v = video.Video(
|
|
fs, ticks_per_second=10000.,
|
|
mode=video_mode.VideoMode.DHGR)
|
|
|
|
frame = screen.MemoryMap(screen_page=1)
|
|
frame.page_offset[0, 0] = 0b1111111
|
|
frame.page_offset[0, 1] = 0b1010101
|
|
|
|
target_pixelmap = screen.DHGRBitmap(
|
|
palette=palette.Palette.NTSC,
|
|
main_memory=v.memory_map,
|
|
aux_memory=frame
|
|
)
|
|
self.assertEqual(
|
|
0b0000000000101010100000001111111000,
|
|
target_pixelmap.packed[0, 0])
|
|
|
|
pal = palette.NTSCPalette
|
|
|
|
diff = target_pixelmap.diff_weights(v.pixelmap, is_aux=True)
|
|
|
|
# Expect byte 0 to map to 0b0001111111000
|
|
expect0 = target_pixelmap.edit_distances(pal.ID)[0][0b0001111111000]
|
|
|
|
# Expect byte 2 to map to 0b0001010101000
|
|
expect2 = target_pixelmap.edit_distances(pal.ID)[2][0b0001010101000]
|
|
|
|
self.assertEqual(expect0, diff[0, 0])
|
|
self.assertEqual(expect2, diff[0, 1])
|
|
|
|
# Update aux frame
|
|
v.aux_memory_map.page_offset = frame.page_offset
|
|
v.pixelmap._pack()
|
|
self.assertEqual(
|
|
0b0000000000101010100000001111111000,
|
|
v.pixelmap.packed[0, 0]
|
|
)
|
|
|
|
# Encode new aux frame
|
|
frame = screen.MemoryMap(screen_page=1)
|
|
frame.page_offset[0, 0] = 0b1101101
|
|
frame.page_offset[0, 1] = 0b0110110
|
|
|
|
target_pixelmap = screen.DHGRBitmap(
|
|
main_memory=v.memory_map,
|
|
aux_memory=frame,
|
|
palette=pal.ID
|
|
)
|
|
self.assertEqual(
|
|
0b0000000000011011000000001101101000,
|
|
target_pixelmap.packed[0, 0]
|
|
)
|
|
|
|
diff = target_pixelmap.diff_weights(v.pixelmap, is_aux=True)
|
|
|
|
# Masked offset 0 changes from 0001111111000 to 0001101101000
|
|
expect0 = target_pixelmap.edit_distances(pal.ID)[0][
|
|
0b00011111110000001101101000]
|
|
|
|
# Masked offset 2 changes from 0001010101000 to 0000110110000
|
|
expect2 = target_pixelmap.edit_distances(pal.ID)[2][
|
|
0b00010101010000000110110000]
|
|
|
|
self.assertEqual(expect0, diff[0, 0])
|
|
self.assertEqual(expect2, diff[0, 1])
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|