| """Tests dump_yuvs.""" | |
| import os | |
| import pathlib | |
| import tempfile | |
| import unittest | |
| from avm_stats import dump_yuvs | |
| TESTDATA_ENV_VAR = "LIBAOM_TEST_DATA_PATH" | |
| TESTDATA_PATH = pathlib.Path(__file__).parent.resolve() / "testdata" | |
| PROTO_FILENAME = "park_joy_90p_8_420_frame_0000.pb" | |
| TEST_STREAM_WIDTH = 160 | |
| TEST_STREAM_HEIGHT = 90 | |
| class DumpYuvsTest(unittest.TestCase): | |
| def setUp(self): | |
| super().setUp() | |
| if TESTDATA_ENV_VAR not in os.environ: | |
| raise RuntimeError( | |
| f"{TESTDATA_ENV_VAR} environment variable must be set before running" | |
| " pytest!" | |
| ) | |
| self.testdata_path = pathlib.Path(os.environ[TESTDATA_ENV_VAR]) | |
| def check_output_filesize( | |
| self, output_path: pathlib.Path, expected_file_size: int | |
| ): | |
| self.assertTrue(output_path.exists()) | |
| size = output_path.stat().st_size | |
| self.assertEqual(size, expected_file_size) | |
| def test_all_yuvs_are_created(self): | |
| proto_path = self.testdata_path / PROTO_FILENAME | |
| with tempfile.TemporaryDirectory() as temp_dir: | |
| output_path = pathlib.Path(temp_dir) | |
| dump_yuvs.dump_all_yuvs(proto_path, output_path) | |
| expected_outputs = [ | |
| "original", | |
| "prediction", | |
| "pre_filtered", | |
| "reconstruction", | |
| ] | |
| # With 8bpp, 4:2:0 chroma subsampling, each pixel is 1.5 bytes. | |
| expected_file_size = TEST_STREAM_WIDTH * TEST_STREAM_HEIGHT * 3 // 2 | |
| for expected_output in expected_outputs: | |
| expected_path = output_path / f"{proto_path.stem}_{expected_output}.yuv" | |
| self.check_output_filesize(expected_path, expected_file_size) |