mirror of
https://github.com/KrisKennaway/ii-vision.git
synced 2024-09-13 20:57:45 +00:00
666272a8fc
- naive version of NTSC artifacting, it uses a sliding 4-bit window to assign a nominal (D)HGR colour to each dot position. A more sophisticated/correct implementation would model the YIQ signal directly. - Switch DHGRBitmap implementation to use a 34-bit representation of the 4-byte tuple, comprised of a 3-bit header and footer, plus 4*7=28-bit body. The headers/footers account for the influence on neighbouring tuples from the 4-bit NTSC window. - With this model each screen byte influences 13 pixels, so we need to precompute 2^26 edit distances for all possible (source, target) 13-bit sequences. - Checkpointing not-yet-working HGR implementation. - Add new unit tests but not yet all passing due to refactoring
82 lines
2.4 KiB
Python
82 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(
|
|
0b0000000101010100000001111111,
|
|
target_pixelmap.packed[0, 0])
|
|
|
|
pal = palette.NTSCPalette
|
|
|
|
diff = target_pixelmap.diff_weights(v.pixelmap, is_aux=True)
|
|
|
|
# Expect byte 0 to map to 0b00000000 01111111
|
|
expect0 = target_pixelmap.edit_distances(pal.ID)[0][0b0000000001111111]
|
|
|
|
# Expect byte 2 to map to 0b000000000000 000101010100
|
|
expect2 = target_pixelmap.edit_distances(pal.ID)[2][0b000101010100]
|
|
|
|
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(
|
|
0b0000000101010100000001111111,
|
|
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
|
|
)
|
|
self.assertEqual(
|
|
0b0000000011011000000001101101,
|
|
target_pixelmap.packed[0, 0]
|
|
)
|
|
|
|
diff = target_pixelmap.diff_weights(v.pixelmap, is_aux=True)
|
|
|
|
# Expect byte 0 to map to 0b01111111 01101101
|
|
expect0 = target_pixelmap.edit_distances(pal.ID)[0][0b0111111101101101]
|
|
|
|
# Expect byte 2 to map to 0b000101010100 000011011000
|
|
expect2 = target_pixelmap.edit_distances(pal.ID)[2][
|
|
0b0000101010100000011011000]
|
|
|
|
self.assertEqual(expect0, diff[0, 0])
|
|
self.assertEqual(expect2, diff[0, 1])
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|