mirror of
https://github.com/KrisKennaway/ii-vision.git
synced 2025-07-19 03:24:05 +00:00
Checkpoint WIP for easier comparison to dhgr branch:
- 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
This commit is contained in:
107
transcoder/colours_test.py
Normal file
107
transcoder/colours_test.py
Normal file
@@ -0,0 +1,107 @@
|
||||
import unittest
|
||||
|
||||
import colours
|
||||
|
||||
HGRColours = colours.HGRColours
|
||||
|
||||
|
||||
class TestColours(unittest.TestCase):
|
||||
|
||||
def test_int28_to_pixels(self):
|
||||
self.assertEqual(
|
||||
(
|
||||
HGRColours.BLACK,
|
||||
HGRColours.BLACK,
|
||||
HGRColours.BLACK,
|
||||
HGRColours.BLACK,
|
||||
HGRColours.BLACK,
|
||||
HGRColours.BLACK,
|
||||
HGRColours.DARK_BLUE,
|
||||
HGRColours.MED_BLUE,
|
||||
HGRColours.AQUA,
|
||||
HGRColours.AQUA,
|
||||
HGRColours.GREEN,
|
||||
HGRColours.BROWN,
|
||||
HGRColours.BLACK,
|
||||
HGRColours.BLACK,
|
||||
HGRColours.BLACK,
|
||||
HGRColours.BLACK,
|
||||
HGRColours.BLACK,
|
||||
HGRColours.BLACK,
|
||||
HGRColours.BLACK,
|
||||
HGRColours.BLACK,
|
||||
HGRColours.BLACK,
|
||||
HGRColours.BLACK,
|
||||
HGRColours.BLACK,
|
||||
HGRColours.BLACK,
|
||||
HGRColours.BLACK,
|
||||
HGRColours.BLACK,
|
||||
HGRColours.BLACK,
|
||||
HGRColours.BLACK,
|
||||
),
|
||||
colours.int34_to_nominal_colour_pixels(
|
||||
0b00000000000000000000111000000000, HGRColours
|
||||
)
|
||||
)
|
||||
|
||||
self.assertEqual(
|
||||
(
|
||||
HGRColours.BLACK,
|
||||
HGRColours.MAGENTA,
|
||||
HGRColours.VIOLET,
|
||||
HGRColours.LIGHT_BLUE,
|
||||
HGRColours.WHITE,
|
||||
HGRColours.AQUA,
|
||||
HGRColours.GREEN,
|
||||
HGRColours.BROWN,
|
||||
HGRColours.BLACK,
|
||||
HGRColours.MAGENTA,
|
||||
HGRColours.VIOLET,
|
||||
HGRColours.LIGHT_BLUE,
|
||||
HGRColours.WHITE,
|
||||
HGRColours.AQUA,
|
||||
HGRColours.GREEN,
|
||||
HGRColours.BROWN,
|
||||
HGRColours.BLACK,
|
||||
HGRColours.MAGENTA,
|
||||
HGRColours.VIOLET,
|
||||
HGRColours.LIGHT_BLUE,
|
||||
HGRColours.WHITE,
|
||||
HGRColours.AQUA,
|
||||
HGRColours.GREEN,
|
||||
HGRColours.BROWN,
|
||||
HGRColours.BLACK,
|
||||
HGRColours.BLACK,
|
||||
HGRColours.BLACK,
|
||||
HGRColours.BLACK
|
||||
),
|
||||
colours.int34_to_nominal_colour_pixels(
|
||||
0b0000111100001111000011110000, HGRColours
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
class TestRolRoR(unittest.TestCase):
|
||||
def testRolOne(self):
|
||||
self.assertEqual(0b1111, colours.rol(0b1111, 1))
|
||||
self.assertEqual(0b0001, colours.rol(0b1000, 1))
|
||||
self.assertEqual(0b1010, colours.rol(0b0101, 1))
|
||||
|
||||
def testRolMany(self):
|
||||
self.assertEqual(0b1111, colours.rol(0b1111, 3))
|
||||
self.assertEqual(0b0010, colours.rol(0b1000, 2))
|
||||
self.assertEqual(0b0101, colours.rol(0b0101, 2))
|
||||
|
||||
def testRorOne(self):
|
||||
self.assertEqual(0b1111, colours.ror(0b1111, 1))
|
||||
self.assertEqual(0b1000, colours.ror(0b0001, 1))
|
||||
self.assertEqual(0b0101, colours.ror(0b1010, 1))
|
||||
|
||||
def testRoRMany(self):
|
||||
self.assertEqual(0b1111, colours.ror(0b1111, 3))
|
||||
self.assertEqual(0b1000, colours.ror(0b0010, 2))
|
||||
self.assertEqual(0b0101, colours.ror(0b0101, 2))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
Reference in New Issue
Block a user