From c28c290295e63cbcf08cf1dd14b2280bcc51a2e4 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Mon, 13 Jul 2020 18:51:58 -0700 Subject: [PATCH 01/21] GB Video: Always initialize palette --- CHANGES | 1 + src/gb/renderers/software.c | 2 ++ 2 files changed, 3 insertions(+) diff --git a/CHANGES b/CHANGES index 8410325b9..ede971bab 100644 --- a/CHANGES +++ b/CHANGES @@ -15,6 +15,7 @@ Emulation fixes: - GB MBC: Fix MBC1 RAM enable bit selection - GB MBC: Fix MBC2 bit selection - GB Video: Fix state after skipping BIOS (fixes mgba.io/i/1715 and mgba.io/i/1716) + - GB Video: Always initialize palette - GBA: Fix timing advancing too quickly in rare cases - GBA BIOS: Implement dummy sound driver calls - GBA BIOS: Improve HLE BIOS timing diff --git a/src/gb/renderers/software.c b/src/gb/renderers/software.c index 4d3f8b284..637bae496 100644 --- a/src/gb/renderers/software.c +++ b/src/gb/renderers/software.c @@ -213,6 +213,8 @@ static void GBVideoSoftwareRendererInit(struct GBVideoRenderer* renderer, enum G softwareRenderer->lookup[i] = i; softwareRenderer->lookup[i] = i; } + + memset(softwareRenderer->palette, 0, sizeof(softwareRenderer->palette)); } static void GBVideoSoftwareRendererDeinit(struct GBVideoRenderer* renderer) { From 7328e96ced3a7adc94239a15f5d166dca15b5284 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Mon, 13 Jul 2020 18:53:56 -0700 Subject: [PATCH 02/21] GBA Video: Fix color of disabled screen --- CHANGES | 1 + include/mgba/internal/gba/renderers/video-software.h | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index ede971bab..fb075d3a9 100644 --- a/CHANGES +++ b/CHANGES @@ -27,6 +27,7 @@ Emulation fixes: - GBA Video: Latch scanline at end of Hblank (fixes mgba.io/i/1319) - GBA Video: Fix Hblank timing - GBA Video: Fix invalid read in mode 4 mosaic + - GBA Video: Fix color of disabled screen - SM83: Emulate HALT bug Other fixes: - All: Improve export headers (fixes mgba.io/i/1738) diff --git a/include/mgba/internal/gba/renderers/video-software.h b/include/mgba/internal/gba/renderers/video-software.h index 514dc3593..ad5aa5932 100644 --- a/include/mgba/internal/gba/renderers/video-software.h +++ b/include/mgba/internal/gba/renderers/video-software.h @@ -53,7 +53,7 @@ enum { GBA_COLOR_WHITE = 0x7FFF, #endif #else - GBA_COLOR_WHITE = 0x00F8F8F8, + GBA_COLOR_WHITE = 0x00FFFFFF, #endif OFFSET_PRIORITY = 30, OFFSET_INDEX = 28, From 746ee657d70899000daf34730ad15af5c9baac6c Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Wed, 15 Jul 2020 01:27:25 -0700 Subject: [PATCH 03/21] FFmpeg: Fix encoding of time base --- CHANGES | 1 + src/feature/ffmpeg/ffmpeg-encoder.c | 2 ++ 2 files changed, 3 insertions(+) diff --git a/CHANGES b/CHANGES index fb075d3a9..7b5b62412 100644 --- a/CHANGES +++ b/CHANGES @@ -37,6 +37,7 @@ Other fixes: - Core: Ensure ELF regions can be written before trying - Debugger: Don't skip undefined instructions when debugger attached - FFmpeg: Fix some small memory leaks + - FFmpeg: Fix encoding of time base - GB Core: Fix extracting SRAM when none is present - GBA Savedata: Fix extracting save when not yet configured in-game - Qt: Force OpenGL paint engine creation thread (fixes mgba.io/i/1642) diff --git a/src/feature/ffmpeg/ffmpeg-encoder.c b/src/feature/ffmpeg/ffmpeg-encoder.c index 7f58d28df..04501c901 100644 --- a/src/feature/ffmpeg/ffmpeg-encoder.c +++ b/src/feature/ffmpeg/ffmpeg-encoder.c @@ -365,6 +365,8 @@ bool FFmpegEncoderOpen(struct FFmpegEncoder* encoder, const char* outfile) { encoder->video->height = encoder->height; encoder->video->time_base = (AVRational) { VIDEO_TOTAL_LENGTH * encoder->frameskip, GBA_ARM7TDMI_FREQUENCY }; encoder->video->framerate = (AVRational) { GBA_ARM7TDMI_FREQUENCY, VIDEO_TOTAL_LENGTH * encoder->frameskip }; + encoder->videoStream->time_base = encoder->video->time_base; + encoder->videoStream->avg_frame_rate = encoder->video->framerate; encoder->video->pix_fmt = encoder->pixFormat; encoder->video->gop_size = 60; encoder->video->max_b_frames = 3; From c3e048d5fbcfa055ecfd7731d53ea7b70a32d2a5 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Wed, 15 Jul 2020 01:50:37 -0700 Subject: [PATCH 04/21] GB Video: Fix state loading --- src/gb/video.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gb/video.c b/src/gb/video.c index 575bdeb2f..fa5404c5a 100644 --- a/src/gb/video.c +++ b/src/gb/video.c @@ -894,6 +894,9 @@ void GBVideoDeserialize(struct GBVideo* video, const struct GBSerializedState* s mTimingSchedule(&video->p->timing, &video->frameEvent, when); } + video->renderer->deinit(video->renderer); + video->renderer->init(video->renderer, video->p->model, video->sgbBorders); + size_t i; for (i = 0; i < 64; ++i) { LOAD_16LE(video->palette[i], i * 2, state->video.palette); @@ -905,7 +908,4 @@ void GBVideoDeserialize(struct GBVideo* video, const struct GBSerializedState* s _cleanOAM(video, video->ly); GBVideoSwitchBank(video, video->vramCurrentBank); - - video->renderer->deinit(video->renderer); - video->renderer->init(video->renderer, video->p->model, video->sgbBorders); } From 386b788956da824036574fd445e2efd59d9afba6 Mon Sep 17 00:00:00 2001 From: LinRs <56530472+LinRs@users.noreply.github.com> Date: Thu, 16 Jul 2020 03:20:30 +0000 Subject: [PATCH 05/21] Qt: Update Simplified Chinese GUI translation (#1819) - remove unnecessary whitespace - fix non-quote punctuation --- src/platform/qt/ts/mgba-zh_CN.ts | 35 +++++++++----------------------- 1 file changed, 10 insertions(+), 25 deletions(-) diff --git a/src/platform/qt/ts/mgba-zh_CN.ts b/src/platform/qt/ts/mgba-zh_CN.ts index 031a1f643..8a8a1a623 100644 --- a/src/platform/qt/ts/mgba-zh_CN.ts +++ b/src/platform/qt/ts/mgba-zh_CN.ts @@ -126,7 +126,7 @@ Game Boy Advance 是任天堂有限公司(Nintendo Co., Ltd.)的注册商标 - BattleChipView + BattleChipView BattleChip Gate @@ -531,7 +531,7 @@ Game Boy Advance 是任天堂有限公司(Nintendo Co., Ltd.)的注册商标 2 2 - + Cancel @@ -904,7 +904,7 @@ Game Boy Advance 是任天堂有限公司(Nintendo Co., Ltd.)的注册商标 Address 地址 - + 0x07000000 0x07000000 @@ -1512,11 +1512,6 @@ Game Boy Advance 是任天堂有限公司(Nintendo Co., Ltd.)的注册商标 Add CodeBreaker 添加 CodeBreaker - - - Add GameShark - 添加 GameShark - Add GameGenie @@ -1562,7 +1557,7 @@ Game Boy Advance 是任天堂有限公司(Nintendo Co., Ltd.)的注册商标 Could not load game. Are you sure it's in the correct format? - 无法载入游戏。请确认游戏格式是否无误。 + 无法载入游戏。是否确认游戏格式无误? @@ -1696,8 +1691,8 @@ Game Boy Advance 是任天堂有限公司(Nintendo Co., Ltd.)的注册商标 - Graphics Interchange Format (*.gif);;Animated Portable Network Graphics (*.png *.apng)" - 图形交换格式 (*.gif);;动画便携式网络图形 (*.png *.apng)" + Graphics Interchange Format (*.gif);;Animated Portable Network Graphics (*.png *.apng)" + 图形交换格式 (*.gif);;动画便携式网络图形 (*.png *.apng)" @@ -3821,7 +3816,7 @@ Game Boy Advance 是任天堂有限公司(Nintendo Co., Ltd.)的注册商标 %1 - %2 - %3 - %1 - %2 - %3 + %1 - %2 - %3 @@ -3947,7 +3942,7 @@ Game Boy Advance 是任天堂有限公司(Nintendo Co., Ltd.)的注册商标 State &%1 - 即时存档 1(&1) + 即时存档 (&%1) @@ -4098,7 +4093,7 @@ Game Boy Advance 是任天堂有限公司(Nintendo Co., Ltd.)的注册商标 BattleChip Gate... BattleChip Gate... - + Audio/&Video @@ -5318,21 +5313,11 @@ Game Boy Advance 是任天堂有限公司(Nintendo Co., Ltd.)的注册商标 MKV MKV - - - WebM - WebM - AVI AVI - - - MP4 - MP4 - h.264 @@ -5407,7 +5392,7 @@ Game Boy Advance 是任天堂有限公司(Nintendo Co., Ltd.)的注册商标 Bitrate (kbps) - 比特率 (kbps) + 比特率 (kbps) From b8e9f50c92a55c3d81b2f5f12bbc6d49a84f1a9c Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Tue, 23 Jun 2020 22:59:00 -0700 Subject: [PATCH 06/21] Core: Add mVideoLogIsCompatible function --- include/mgba/feature/video-logger.h | 3 +++ src/feature/video-logger.c | 22 ++++++++++++++++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/include/mgba/feature/video-logger.h b/include/mgba/feature/video-logger.h index b466e4b6c..b40caff6d 100644 --- a/include/mgba/feature/video-logger.h +++ b/include/mgba/feature/video-logger.h @@ -10,6 +10,8 @@ CXX_GUARD_START +#include + #include #define mVL_MAX_CHANNELS 32 @@ -128,6 +130,7 @@ void mVideoLoggerInjectVideoRegister(struct mVideoLogger* logger, uint32_t addre void mVideoLoggerInjectPalette(struct mVideoLogger* logger, uint32_t address, uint16_t value); void mVideoLoggerInjectOAM(struct mVideoLogger* logger, uint32_t address, uint16_t value); +enum mPlatform mVideoLogIsCompatible(struct VFile*); struct mCore* mVideoLogCoreFind(struct VFile*); CXX_GUARD_END diff --git a/src/feature/video-logger.c b/src/feature/video-logger.c index a240d2c33..e28e20ac1 100644 --- a/src/feature/video-logger.c +++ b/src/feature/video-logger.c @@ -5,7 +5,6 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include -#include #include #include #include @@ -1033,7 +1032,7 @@ static ssize_t mVideoLoggerWriteChannel(struct mVideoLogChannel* channel, const return read; } -struct mCore* mVideoLogCoreFind(struct VFile* vf) { +static const struct mVLDescriptor* _mVideoLogDescriptor(struct VFile* vf) { if (!vf) { return NULL; } @@ -1055,6 +1054,25 @@ struct mCore* mVideoLogCoreFind(struct VFile* vf) { break; } } + if (descriptor->platform == PLATFORM_NONE) { + return NULL; + } + return descriptor; +} + +enum mPlatform mVideoLogIsCompatible(struct VFile* vf) { + const struct mVLDescriptor* descriptor = _mVideoLogDescriptor(vf); + if (descriptor) { + return descriptor->platform; + } + return PLATFORM_NONE; +} + +struct mCore* mVideoLogCoreFind(struct VFile* vf) { + const struct mVLDescriptor* descriptor = _mVideoLogDescriptor(vf); + if (!descriptor) { + return NULL; + } struct mCore* core = NULL; if (descriptor->open) { core = descriptor->open(); From 4f671290989321fc98ec15e0ec307eaafc07d031 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Tue, 23 Jun 2020 23:00:32 -0700 Subject: [PATCH 07/21] Test: Start porting CInema to C --- CMakeLists.txt | 2 + src/platform/test/CMakeLists.txt | 8 +- src/platform/test/cinema-main.c | 321 +++++++++++++++++++++++++++++++ 3 files changed, 330 insertions(+), 1 deletion(-) create mode 100644 src/platform/test/cinema-main.c diff --git a/CMakeLists.txt b/CMakeLists.txt index f91a2adad..ea7c3905f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -59,6 +59,7 @@ if(NOT LIBMGBA_ONLY) set(BUILD_PERF OFF CACHE BOOL "Build performance profiling tool") set(BUILD_TEST OFF CACHE BOOL "Build testing harness") set(BUILD_SUITE OFF CACHE BOOL "Build test suite") + set(BUILD_CINEMA OFF CACHE BOOL "Build video tests suite") set(BUILD_EXAMPLE OFF CACHE BOOL "Build example frontends") set(BUILD_PYTHON OFF CACHE BOOL "Build Python bindings") set(BUILD_STATIC OFF CACHE BOOL "Build a static library") @@ -1221,6 +1222,7 @@ if(NOT QUIET AND NOT LIBMGBA_ONLY) message(STATUS " Profiling: ${BUILD_PERF}") message(STATUS " Test harness: ${BUILD_TEST}") message(STATUS " Test suite: ${BUILD_SUITE}") + message(STATUS " Video test suite: ${BUILD_CINEMA}") message(STATUS " Python bindings: ${BUILD_PYTHON}") message(STATUS " Examples: ${BUILD_EXAMPLE}") message(STATUS "Cores:") diff --git a/src/platform/test/CMakeLists.txt b/src/platform/test/CMakeLists.txt index 62e6b0ac2..4f7056d53 100644 --- a/src/platform/test/CMakeLists.txt +++ b/src/platform/test/CMakeLists.txt @@ -36,4 +36,10 @@ if(BUILD_SUITE) set_target_properties(test-${TEST_NAME} PROPERTIES COMPILE_DEFINITIONS "${OS_DEFINES};${FEATURE_DEFINES};${FUNCTION_DEFINES}") add_test(${TEST_NAME} test-${TEST_NAME}) endforeach() -endif() \ No newline at end of file +endif() + +if(BUILD_CINEMA) + enable_testing() + add_executable(${BINARY_NAME}-cinema ${CMAKE_CURRENT_SOURCE_DIR}/cinema-main.c) + target_link_libraries(${BINARY_NAME}-cinema ${BINARY_NAME} ${PLATFORM_LIBRARY}) +endif() diff --git a/src/platform/test/cinema-main.c b/src/platform/test/cinema-main.c new file mode 100644 index 000000000..eebae90a9 --- /dev/null +++ b/src/platform/test/cinema-main.c @@ -0,0 +1,321 @@ +/* Copyright (c) 2013-2020 Jeffrey Pfau + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +#include +#include +#include +#include +#include +#include + +#include +#include + +#ifdef _MSC_VER +#include +#else +#include +#endif + +#include + +#define MAX_TEST 200 + +static const struct option longOpts[] = { + { "base", required_argument, 0, 'b' }, + { "help", no_argument, 0, 'h' }, + { "quiet", no_argument, 0, 'q' }, + { "dry-run", no_argument, 0, 'n' }, + { "verbose", no_argument, 0, 'v' }, + { "version", no_argument, 0, '\0' }, + { 0, 0, 0, 0 } +}; + +static const char shortOpts[] = "b:hnqv"; + +enum CInemaStatus { + CI_PASS, + CI_FAIL, + CI_XPASS, + CI_XFAIL, + CI_SKIP +}; + +struct CInemaTest { + char directory[MAX_TEST]; + char filename[MAX_TEST]; + char name[MAX_TEST]; + struct mCoreConfig config; + enum CInemaStatus status; + int failedFrames; +}; + +DECLARE_VECTOR(CInemaTestList, struct CInemaTest) +DEFINE_VECTOR(CInemaTestList, struct CInemaTest) + +static bool showVersion = false; +static bool showUsage = false; +static char base[PATH_MAX] = {0}; +static bool dryRun = false; +static int verbosity = 0; + +ATTRIBUTE_FORMAT(printf, 2, 3) void CIlog(int minlevel, const char* format, ...) { + if (verbosity < minlevel) { + return; + } + va_list args; + va_start(args, format); + vprintf(format, args); + va_end(args); +} + +ATTRIBUTE_FORMAT(printf, 2, 3) void CIerr(int minlevel, const char* format, ...) { + if (verbosity < minlevel) { + return; + } + va_list args; + va_start(args, format); + vfprintf(stderr, format, args); + va_end(args); +} + +bool CInemaTestInit(struct CInemaTest*, const char* directory, const char* filename); +void CInemaTestDeinit(struct CInemaTest*); + +static bool parseCInemaArgs(int argc, char* const* argv) { + int ch; + int index = 0; + while ((ch = getopt_long(argc, argv, shortOpts, longOpts, &index)) != -1) { + const struct option* opt = &longOpts[index]; + switch (ch) { + case '\0': + if (strcmp(opt->name, "version") == 0) { + showVersion = true; + } else { + return false; + } + break; + case 'b': + strncpy(base, optarg, sizeof(base)); + // TODO: Verify path exists + break; + case 'h': + showUsage = true; + break; + case 'n': + dryRun = true; + break; + case 'q': + --verbosity; + break; + case 'v': + ++verbosity; + break; + default: + return false; + } + } + + return true; +} + +static void usageCInema(const char* arg0) { + printf("usage: %s [-h] [-b BASE] [--version] [test...]\n", arg0); + puts(" -b, --base Path to the CInema base directory"); + puts(" -h, --help Print this usage and exit"); + puts(" -n, --dry-run List all collected tests instead of running them"); + puts(" -q, --quiet Decrease log verbosity (can be repeated)"); + puts(" -v, --verbose Increase log verbosity (can be repeated)"); + puts(" --version Print version and exit"); +} + +static bool determineBase(int argc, char* const* argv) { + // TODO: Better dynamic detection + separatePath(__FILE__, base, NULL, NULL); + strncat(base, PATH_SEP ".." PATH_SEP ".." PATH_SEP ".." PATH_SEP "cinema", sizeof(base) - strlen(base) - 1); + return true; +} + +static bool collectTests(struct CInemaTestList* tests, const char* path) { + CIerr(1, "Considering path %s\n", path); + struct VDir* dir = VDirOpen(path); + if (!dir) { + return false; + } + struct VDirEntry* entry = dir->listNext(dir); + while (entry) { + char subpath[PATH_MAX]; + snprintf(subpath, sizeof(subpath), "%s" PATH_SEP "%s", path, entry->name(entry)); + if (entry->type(entry) == VFS_DIRECTORY && strncmp(entry->name(entry), ".", 2) != 0 && strncmp(entry->name(entry), "..", 3) != 0) { + if (!collectTests(tests, subpath)) { + dir->close(dir); + return false; + } + } else if (entry->type(entry) == VFS_FILE && strncmp(entry->name(entry), "test.", 5) == 0) { + CIerr(2, "Found potential test %s\n", subpath); + struct VFile* vf = dir->openFile(dir, entry->name(entry), O_RDONLY); + if (vf) { + if (mCoreIsCompatible(vf) != PLATFORM_NONE || mVideoLogIsCompatible(vf) != PLATFORM_NONE) { + struct CInemaTest* test = CInemaTestListAppend(tests); + if (!CInemaTestInit(test, path, entry->name(entry))) { + CIerr(2, "Failed to create test\n"); + CInemaTestListResize(tests, -1); + } else { + CIerr(1, "Found test %s\n", test->name); + } + } else { + CIerr(2, "Not a compatible file\n"); + } + vf->close(vf); + } else { + CIerr(2, "Failed to open file\n"); + } + } + entry = dir->listNext(dir); + } + dir->close(dir); + return true; +} + +static int _compareNames(const void* a, const void* b) { + const struct CInemaTest* ta = a; + const struct CInemaTest* tb = b; + + return strncmp(ta->name, tb->name, sizeof(ta->name)); +} + +static void reduceTestList(struct CInemaTestList* tests) { + qsort(CInemaTestListGetPointer(tests, 0), CInemaTestListSize(tests), sizeof(struct CInemaTest), _compareNames); + + size_t i; + for (i = 1; i < CInemaTestListSize(tests);) { + struct CInemaTest* cur = CInemaTestListGetPointer(tests, i); + struct CInemaTest* prev = CInemaTestListGetPointer(tests, i - 1); + if (strncmp(cur->name, prev->name, sizeof(cur->name)) != 0) { + ++i; + continue; + } + CInemaTestDeinit(cur); + CInemaTestListShift(tests, i, 1); + } +} + +bool CInemaTestInit(struct CInemaTest* test, const char* directory, const char* filename) { + if (strncmp(base, directory, strlen(base)) != 0) { + return false; + } + strncpy(test->directory, directory, sizeof(test->directory)); + strncpy(test->filename, filename, sizeof(test->filename)); + directory += strlen(base) + 1; + strncpy(test->name, directory, sizeof(test->name)); + char* str = strstr(test->name, PATH_SEP); + while (str) { + str[0] = '.'; + str = strstr(str, PATH_SEP); + } + return true; +} + +void CInemaTestDeinit(struct CInemaTest* test) { + // TODO: Write +} + +int main(int argc, char** argv) { + int status = 0; + if (!parseCInemaArgs(argc, argv)) { + status = 1; + goto cleanup; + } + + if (showVersion) { + version(argv[0]); + goto cleanup; + } + + if (showUsage) { + usageCInema(argv[0]); + goto cleanup; + } + + argc -= optind; + argv += optind; + + if (!base[0] && !determineBase(argc, argv)) { + CIerr(0, "Could not determine CInema test base. Please specify manually."); + status = 1; + goto cleanup; + } +#ifndef _WIN32 + char* rbase = realpath(base, NULL); + strncpy(base, rbase, PATH_MAX); + free(rbase); +#endif + + struct CInemaTestList tests; + CInemaTestListInit(&tests, 0); + + if (argc > 0) { + size_t i; + for (i = 0; i < (size_t) argc; ++i) { + char path[PATH_MAX + 1] = {0}; + char* arg = argv[i]; + strncpy(path, base, sizeof(path)); + + bool dotSeen = true; + size_t j; + for (arg = argv[i], j = strlen(path); arg[0] && j < sizeof(path); ++arg) { + if (arg[0] == '.') { + dotSeen = true; + } else { + if (dotSeen) { + strncpy(&path[j], PATH_SEP, sizeof(path) - j); + j += strlen(PATH_SEP); + dotSeen = false; + if (!j) { + break; + } + } + path[j] = arg[0]; + ++j; + } + } + + if (!collectTests(&tests, path)) { + status = 1; + break; + } + } + } else if (!collectTests(&tests, base)) { + status = 1; + } + + if (CInemaTestListSize(&tests) == 0) { + CIerr(1, "No tests found."); + status = 1; + } else { + reduceTestList(&tests); + } + + if (dryRun) { + size_t i; + for (i = 0; i < CInemaTestListSize(&tests); ++i) { + struct CInemaTest* test = CInemaTestListGetPointer(&tests, i); + CIlog(-1, "%s\n", test->name); + } + } else { + // TODO: Write + } + + size_t i; + for (i = 0; i < CInemaTestListSize(&tests); ++i) { + struct CInemaTest* test = CInemaTestListGetPointer(&tests, i); + CInemaTestDeinit(test); + } + + CInemaTestListDeinit(&tests); + +cleanup: + return status; +} \ No newline at end of file From d6f041d5e79659245731e51b30732421be116890 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Wed, 24 Jun 2020 04:31:35 -0700 Subject: [PATCH 08/21] CInema: Clean up size issues --- cinema/gb/window/007wne-hud/baseline_0000.png | Bin 4734 -> 3693 bytes cinema/gb/window/007wne-hud/baseline_0001.png | Bin 4734 -> 3693 bytes cinema/gb/window/007wne-hud/baseline_0002.png | Bin 4734 -> 3693 bytes cinema/gb/window/007wne-hud/baseline_0003.png | Bin 4734 -> 3693 bytes cinema/gb/window/ccmmr-hud/baseline_0000.png | Bin 3979 -> 3106 bytes cinema/gb/window/ccmmr-hud/baseline_0001.png | Bin 3979 -> 3106 bytes cinema/gb/window/ccmmr-hud/baseline_0002.png | Bin 3979 -> 3106 bytes cinema/gb/window/ccmmr-hud/baseline_0003.png | Bin 3994 -> 3136 bytes cinema/gb/window/ccmmr-hud/baseline_0004.png | Bin 3994 -> 0 bytes cinema/gb/window/ccmmr-hud/baseline_0005.png | Bin 3999 -> 0 bytes cinema/gb/window/kdt-battle/baseline_0000.png | Bin 3717 -> 3095 bytes cinema/gb/window/kdt-battle/baseline_0001.png | Bin 3717 -> 3095 bytes cinema/gb/window/kdt-battle/baseline_0002.png | Bin 3717 -> 3095 bytes cinema/gb/window/kdt-battle/baseline_0003.png | Bin 3717 -> 3095 bytes cinema/gb/window/kdt-battle/baseline_0004.png | Bin 3717 -> 3095 bytes cinema/gb/window/kdt-battle/baseline_0005.png | Bin 3717 -> 3095 bytes cinema/gb/window/kdt-battle/baseline_0006.png | Bin 3717 -> 3095 bytes cinema/gb/window/kdt-battle/baseline_0007.png | Bin 3717 -> 3095 bytes cinema/gb/window/kdt-battle/baseline_0008.png | Bin 3717 -> 3095 bytes cinema/gb/window/kdt-battle/baseline_0009.png | Bin 3717 -> 3095 bytes cinema/gb/window/rfs-hud/baseline_0000.png | Bin 3380 -> 2768 bytes cinema/gb/window/rfs-hud/baseline_0001.png | Bin 3380 -> 0 bytes cinema/gb/window/rfs-hud/baseline_0002.png | Bin 3587 -> 0 bytes cinema/gb/window/rfs-hud/baseline_0003.png | Bin 3587 -> 0 bytes cinema/gb/window/rfs-hud/baseline_0004.png | Bin 3587 -> 0 bytes cinema/gb/window/rfs-hud/baseline_0005.png | Bin 3587 -> 0 bytes cinema/gb/window/rfs-hud/baseline_0006.png | Bin 3669 -> 0 bytes cinema/gb/window/rfs-hud/baseline_0007.png | Bin 3669 -> 0 bytes cinema/gb/window/rfs-hud/baseline_0008.png | Bin 3669 -> 0 bytes cinema/gb/window/rfs-hud/baseline_0009.png | Bin 3669 -> 0 bytes cinema/gb/window/rfs-hud/baseline_0010.png | Bin 3779 -> 0 bytes cinema/gb/window/rfs-hud/baseline_0011.png | Bin 3779 -> 0 bytes cinema/gb/window/rfs-hud/baseline_0012.png | Bin 3779 -> 0 bytes cinema/gb/window/rfs-hud/baseline_0013.png | Bin 3779 -> 0 bytes cinema/gb/window/rfs-hud/baseline_0014.png | Bin 3781 -> 0 bytes cinema/gb/window/wmm-hud/baseline_0000.png | Bin 6114 -> 5118 bytes cinema/gb/window/zin-head/baseline_0000.png | Bin 4049 -> 3311 bytes cinema/gb/window/zin-head/baseline_0001.png | Bin 4010 -> 3277 bytes cinema/gb/window/zin-head/baseline_0002.png | Bin 4010 -> 3277 bytes cinema/gb/window/zin-head/baseline_0003.png | Bin 4010 -> 3277 bytes cinema/gb/window/zin-head/baseline_0004.png | Bin 4010 -> 3277 bytes cinema/gb/window/zin-head/baseline_0005.png | Bin 4049 -> 3311 bytes src/platform/python/cinema/movie.py | 6 ++++-- src/platform/python/cinema/test.py | 5 ++--- 44 files changed, 6 insertions(+), 5 deletions(-) delete mode 100644 cinema/gb/window/ccmmr-hud/baseline_0004.png delete mode 100644 cinema/gb/window/ccmmr-hud/baseline_0005.png delete mode 100644 cinema/gb/window/rfs-hud/baseline_0001.png delete mode 100644 cinema/gb/window/rfs-hud/baseline_0002.png delete mode 100644 cinema/gb/window/rfs-hud/baseline_0003.png delete mode 100644 cinema/gb/window/rfs-hud/baseline_0004.png delete mode 100644 cinema/gb/window/rfs-hud/baseline_0005.png delete mode 100644 cinema/gb/window/rfs-hud/baseline_0006.png delete mode 100644 cinema/gb/window/rfs-hud/baseline_0007.png delete mode 100644 cinema/gb/window/rfs-hud/baseline_0008.png delete mode 100644 cinema/gb/window/rfs-hud/baseline_0009.png delete mode 100644 cinema/gb/window/rfs-hud/baseline_0010.png delete mode 100644 cinema/gb/window/rfs-hud/baseline_0011.png delete mode 100644 cinema/gb/window/rfs-hud/baseline_0012.png delete mode 100644 cinema/gb/window/rfs-hud/baseline_0013.png delete mode 100644 cinema/gb/window/rfs-hud/baseline_0014.png diff --git a/cinema/gb/window/007wne-hud/baseline_0000.png b/cinema/gb/window/007wne-hud/baseline_0000.png index 9ae2a2a5c9d96d240c97f421f6b8a61fabb7b54d..6fb7af9b144fb21f1308f26f8c581901b71f8d8b 100644 GIT binary patch literal 3693 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 LNkvXXu0mjfWz%yX literal 4734 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 diff --git a/cinema/gb/window/007wne-hud/baseline_0001.png b/cinema/gb/window/007wne-hud/baseline_0001.png index 9ae2a2a5c9d96d240c97f421f6b8a61fabb7b54d..6fb7af9b144fb21f1308f26f8c581901b71f8d8b 100644 GIT binary patch literal 3693 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 LNkvXXu0mjfWz%yX literal 4734 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 diff --git a/cinema/gb/window/007wne-hud/baseline_0002.png b/cinema/gb/window/007wne-hud/baseline_0002.png index 9ae2a2a5c9d96d240c97f421f6b8a61fabb7b54d..6fb7af9b144fb21f1308f26f8c581901b71f8d8b 100644 GIT binary patch literal 3693 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 LNkvXXu0mjfWz%yX literal 4734 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 diff --git a/cinema/gb/window/007wne-hud/baseline_0003.png b/cinema/gb/window/007wne-hud/baseline_0003.png index 9ae2a2a5c9d96d240c97f421f6b8a61fabb7b54d..6fb7af9b144fb21f1308f26f8c581901b71f8d8b 100644 GIT binary patch literal 3693 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 LNkvXXu0mjfWz%yX literal 4734 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 diff --git a/cinema/gb/window/ccmmr-hud/baseline_0000.png b/cinema/gb/window/ccmmr-hud/baseline_0000.png index 75fc1974e22c3db866a1af0fef9f3cb04ff72ae6..e2cb469e91963ca5175f7674fdeaff96f83e2a39 100644 GIT binary patch literal 3106 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 literal 3979 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 literal 3979 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 literal 3979 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 C)G>1a literal 3994 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 diff --git a/cinema/gb/window/kdt-battle/baseline_0000.png b/cinema/gb/window/kdt-battle/baseline_0000.png index 2ba1aa28bbbecc1782b8696a8f1813ce2bb6d1ab..b750cca02206ee31a5e9b52f29a63db08b54b301 100644 GIT binary patch literal 3095 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 diff --git a/cinema/gb/window/kdt-battle/baseline_0001.png b/cinema/gb/window/kdt-battle/baseline_0001.png index 2ba1aa28bbbecc1782b8696a8f1813ce2bb6d1ab..b750cca02206ee31a5e9b52f29a63db08b54b301 100644 GIT binary patch literal 3095 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 diff --git a/cinema/gb/window/kdt-battle/baseline_0002.png b/cinema/gb/window/kdt-battle/baseline_0002.png index 2ba1aa28bbbecc1782b8696a8f1813ce2bb6d1ab..b750cca02206ee31a5e9b52f29a63db08b54b301 100644 GIT binary patch literal 3095 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 diff --git a/cinema/gb/window/kdt-battle/baseline_0003.png b/cinema/gb/window/kdt-battle/baseline_0003.png index 2ba1aa28bbbecc1782b8696a8f1813ce2bb6d1ab..b750cca02206ee31a5e9b52f29a63db08b54b301 100644 GIT binary patch literal 3095 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 diff --git a/cinema/gb/window/kdt-battle/baseline_0004.png b/cinema/gb/window/kdt-battle/baseline_0004.png index 2ba1aa28bbbecc1782b8696a8f1813ce2bb6d1ab..b750cca02206ee31a5e9b52f29a63db08b54b301 100644 GIT binary patch literal 3095 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 diff --git a/cinema/gb/window/kdt-battle/baseline_0005.png b/cinema/gb/window/kdt-battle/baseline_0005.png index 2ba1aa28bbbecc1782b8696a8f1813ce2bb6d1ab..b750cca02206ee31a5e9b52f29a63db08b54b301 100644 GIT binary patch literal 3095 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 diff --git a/cinema/gb/window/kdt-battle/baseline_0006.png b/cinema/gb/window/kdt-battle/baseline_0006.png index 2ba1aa28bbbecc1782b8696a8f1813ce2bb6d1ab..b750cca02206ee31a5e9b52f29a63db08b54b301 100644 GIT binary patch literal 3095 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 diff --git a/cinema/gb/window/kdt-battle/baseline_0007.png b/cinema/gb/window/kdt-battle/baseline_0007.png index 2491849a8d329889cfe9d6db2b1529dea4399306..28e4732778cb3063e4019499b6b9bed1da4efa77 100644 GIT binary patch literal 3095 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 literal 3717 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 diff --git a/cinema/gb/window/kdt-battle/baseline_0008.png b/cinema/gb/window/kdt-battle/baseline_0008.png index 2491849a8d329889cfe9d6db2b1529dea4399306..28e4732778cb3063e4019499b6b9bed1da4efa77 100644 GIT binary patch literal 3095 zcmV+y4CwQTP)0058(0ssI20N3}|000Z#Nkl zv6k986UT>~6wsxFa??S#bhpkM>~@!ua`Ohb^u9qTDY@P58>GG+>7a{CZug}#9bYjp z43aF{l5B)`{)dy}6|!;oc}Anr*z}IaBZ#`IPq#h+QL_@j9hU&^xCC&=C4f6F0o-v3 z;EwBaL&xp)dblC;?Axluf{9a6qp<^u&|3P4npU|5b37Jv)F}$r7*r0pq9H2md%d1G z=NM!I91s#-9D>|I-@Z<9Iuiq#1=IQPJey-Iz_8R;Wm-3r9v02gjA*TC42i#BI*uYXRFr~ z4cD1*Nfb?Er)3b0c4WN^U!sq!6jcGhkM;WdYzAkvA;(~j%?Ma&gvh?i<2?XImK+;8 zXT*tg$yYlJz)&$&8Tr?Ar~3AFN(Ktoh6|eQI;#?3qbUe=A1PrJr@MMhb=!p|=D~I; zanlE+tvlFSdYp{;pX8b6i{#gK2h4VzKLRRFllX?Rt@MmajrthH1l{&Ukcu8BWA2vc zi$w9>wNz-q;(;ylp^HNE<#7|4FaGIyd{WhU@I9)9YxKu@?Uq4=V)Iq}Gx)jaO7mb; zuV4+o_fhA;${<=-`n2cAdJS6G>_ZnSmh2c2cEH5lq~{T9jgh#!ZoWvD>*wzc(f#&y z>NXNLRkG80k@-GO#tx1e&6k)dboJa8pE1{xJKzX?@(so9xRf+HVe$kPSC7a1v0fVo z>?*2}$?8>De)zCLJ4Ot~`7z<=?p;UALE;sl$J@130@z5gdgE=?zK=l|NSZM7MSI@O zE_BPd?QFgv^WcU=2CYP7rD$nv=A*K+`GOR_H>$_Um=chWlX1mql|t835=A#FH06q& z(G_!x|Fzxum@f!mXZ_mlJQE%Eg9lk@00A78s6Yq2xsqb9d5BY0rm%HIRvQW}N`kCg z3J2X^+Z|1W!qNo+>?xlaDgZoA#@}Z%G+fVMsz~CZ9Tm_^H{_gAV!^&5BX+iCoJwIf z+oyQLD2bv22+?|)GEaU5H0ArV;K^Vx84PZH7OFhyj{i~@A48lJK>L6Z4}aC&eY+1+ ztmLVmzc-#0%UrvEcjLdtggGGNwgGSR8~`>?2reKC+uH zVY6%Z?~Zr&ET$y22bhDLzV8k%Z-hH8mF;rrM)rL+Q_3Gb)0xQF8FS!72ck7Xt);`u+w^@G?YLW{@3R>% zh6T2q03I%v7kNR=jAlp+Cb}3p+36aMSZO52(TW=@zu^s7la$D)$}Z%Jl^wVH1buaE zE}GwJfQ$(+H!|feP=^olFWhMaFm02^#!;CzlH}tk-{(dbH+uJ93CWZmjGwO?XNeOd8SbrSf~~JRO?Ea2;GG$S@3COwHlDJ zmS<FF6g2#KB|BD+A8Rrza+N1KkeqQ9&msl3(f;_*ODReGQ%{oAJpmD_9Pl>J zr|-MTD7AdW#?hB28u1|fT}~IS`9+?+x-V54gE2*QczHt%Mpua-)%Bl!0$&yYrv)O? z=4pJoVn!)><49_8I;N^YR%se?o9CP&&1w#_DTP#Up7UJxI>%F-F3pq-A0eu#8c{Sd z){Xe|=bu+)dSiCEUl#qPx^##`!0A)=35L^~*|fiWKH(R%uBtZ=ru8Bo(<&gjz4C2c zCm+s2D&1;NQz-%Ls(SO_lMye~MgW)$2DCx|Ul#Ty2L(C#ZGKtk-9!#@Np$GZ)>U+k zQI%;mm*+Qh#=uOO#$YjDPt{)VrwNa7*2D{7Il}((8B6I-2iYg&pHY)hIvJ(Y_nk6* z5_!s{qGOxqm%Q=y0F2ovFnZT>I~GM_0utZB=xn=B@W_Z?M&BTEFWEsn$oMLF9vN=v zP%3z65$W*q#$)fpY)VH!6PN6jryK#3qgHZ?Rd`^Q1E)qb(89UU4$jsud5<7+UoNEd zr0$K4IZLGjO}CV{DD^=riL%V#Bd_&fJ(%Ju!mPCGmda~p<6*2necJf+#@L>i;8iwD zUpn`+B)VgTX1DmlcH~;*hk2^<@baeIt<;e8Uwz>1yaTo$H8p*P4)U$&;NLr6Y~W?< zdfCRQzlkmm>Qtsfq)$1P7VX$*vi2Y2Z2B4V4)U$&pfnaOHgF!6>UO;v3q>vc z&V+0JgtK`H7ZxyX(Am96w;zc00g|cp{T(F8RNF*rsa&*hKkq zsD>HG54ehpHll3sDLYk=P}MZ;qOViYXx-eYqK=WhN>wS~*AuE?HSYKGzaR6zA8~{J z#aETR@XzD_QcHh-1-eLXDdYdEjp)&svn-tj(G5`)yG5I%j9D#B4|u?JX)I&L!}1p5 ztVWODf{Z9zdR}zV+Jk+j+uG_v{PSSm0vb!p)!FvbX4Qu`ltoYCmQl_>;oRO6-^qyi zT`KV}0^Yk?wctxlHR3egcqpo_D#OZc9th4Q;c*om3x2}6bRK-0;37iL+|?*L#^_NL zP@fNngVOZy@Nkn;5&0|2GNt7zibk}0C(*q~C-|AaH=oawBuUd?zZN5ESy`5)Y5MT+ zK#Y5No&%!`;-c?a$TdyV)oO*?pF!w$NNBr+GRv}Fp66uI+=KV~a^L2?>To!Dcf7h;lZ0-|3I>>y6ElrR0fMZGdkONJ$T!HU*hlEzN|Na4xCC&=C4f6F0o-v3 z;EqcGcU%Ivo-A={@ zaFO|f_WdeLO#Cd}PPeEeNdH_NYAsVP@)>PP{{kJpv|x)3O5qL{|E_~O%%acb?GCov z88!7NL!-Z~*gw?g(zfy7_A9kBY6@`C7+KnmzOe`l_nel%O7C3c+oP=sq@hP?tb6^b zcldYg`u(sfxx-)78GQnI{#ob5AHwp9o~#4_S(ZgI0*Rc3bT3b{%kwKF4D0!OU{YsCN{|~RqO=4m7--7@E002ovPDHLkV1izk34H(n literal 3717 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 diff --git a/cinema/gb/window/kdt-battle/baseline_0009.png b/cinema/gb/window/kdt-battle/baseline_0009.png index 2491849a8d329889cfe9d6db2b1529dea4399306..28e4732778cb3063e4019499b6b9bed1da4efa77 100644 GIT binary patch literal 3095 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 literal 3717 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 diff --git a/cinema/gb/window/rfs-hud/baseline_0000.png b/cinema/gb/window/rfs-hud/baseline_0000.png index a4199c67a9b985b92e3774a6080b449214a3d548..4236bc539bc7bd382cec5333139aec0bdede4d5f 100644 GIT binary patch literal 2768 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 diff --git a/cinema/gb/window/rfs-hud/baseline_0007.png b/cinema/gb/window/rfs-hud/baseline_0007.png deleted file mode 100644 index 7489e9768fbf410d2bac85cb1e26a568e5ff2bb1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3669 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 diff --git a/cinema/gb/window/rfs-hud/baseline_0008.png b/cinema/gb/window/rfs-hud/baseline_0008.png deleted file mode 100644 index 7489e9768fbf410d2bac85cb1e26a568e5ff2bb1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3669 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 diff --git a/cinema/gb/window/rfs-hud/baseline_0009.png b/cinema/gb/window/rfs-hud/baseline_0009.png deleted file mode 100644 index 7489e9768fbf410d2bac85cb1e26a568e5ff2bb1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3669 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 diff --git a/cinema/gb/window/rfs-hud/baseline_0010.png b/cinema/gb/window/rfs-hud/baseline_0010.png deleted file mode 100644 index 3348062175dfb40f9b139a6ab275edaf5ef506d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3779 zcmd6q`8(8K|Ht3R5XKTpl))%VwxmQd5>fVS+3wLNB(h}7HZvkyCE9FZ#+I>-r6gOU zQn<5bkS2RshA~;*<}<^4-1E8a`+xX;e>vBAo#%C4*Ylj~ydLMAbbDJ1xR9(6008jI zmS$H0fQQ=!W(0Y;?G2>1004+SxNLU8DY}4Os2Dwe_Fy-9gTLUrmT-T=3C}Up9Glq& z55wCtTGUPr>b*~~p{e~1BGuPZrMJKHKc3JUX*3|1J@K{54w}e@IOIBXcjS?CBb+@u zJG;jAr_IXmhh8$$(u|=`Q^%EJtem?JJ-sTV*r;(%KGReXdO9^9TWW}sz;MDHs6M-- zu0xAa*}jyd(ms!)d(Dd>7_H{$GZ+f$M};RWXcV`zfDV}dx|mtM8IPOF!WG!Xan_TU zyp{o_#9iq2RJ;Y=_$Wo}D)f4qN<$s#V_GVeV_6XjO0ihnl)?e#&Ii*R`^uQ>zp&m|v0-Duq{xJD}&OOEGUbH=UtyGO3Ne$&@C zL9Y0LlIhyYP6OfTYlb~2pTn19UbKrV;zA}V8n>w>xPFW4AWzMo5T%T=G~HVD|R?Ko8L=~v{@w|Ydxkuz7r{=ymiJQ+jq>iY){W* zVcwPeB|vBhE_mIB=SD{pqpwlqG+rG^M8~6r=+4FXYLjLn@9EcTXU3{WGxIZhhiEtq zrdGa&kDSM=xGT_DxfW2)QN=M@2pd?tZNz$W@xq0r330P6#`LznzP_@s(t+t`@po(a zmw%vc$$5(_JbE$8>ogi-dv`>886K!xunc#lnr2>vZl?UM?f6uKsr>MP9woODVD3OE zqQ5yo`Zvdu6i1s7zqGMQPn$3?zM^R|qoF^3GJ}RcDGfSKc2$(9n#$fAA0L1DQf}|0 zxr3DXb$VZ;brT>IW3@$cN_8ejb#X#Tupt^VE}@XUQpPB5_)D?`yW!_J_QwTm&RDMt z9f0}Qu>3uz64)07oye&I!vkJ+7_Bb}r_J-H$tIxwtU6EIar%}k8DBg|wj8s^31C_D zCuyPx>^L>U1iIC@zcTvF`_^k9D!WlZdLvn!%-MBG-9zI@z0az^I3mhsOcBKHRX=nl z&owwTkCL?%yJkNznrO`lY)3zO><84?S92)eqQs&NsK+sH%*kAB*6p=rUyNt91S#Wr=+|+SdxO$ANb#(^p$TaL|jTuW&bXgIDIjZR@ZS4mV3L0 zNOMA;u}Cbf+(QK!&qUltzpbO#np_kn(OJWudX2?AerIw6yew zJ9rsudj=tWbZG~=yXOh6Za^TBd}Z6!e*x)Bk3DHj;FN_9@F%h{-9BzH`*VllN{cxZ zf0_L$Y^3gcHe$+HB({ZrM(&@O7pzDRSC*kMvld&1_XiK)2ppfv!(0W5UK6kKH3e@R zAv}4(7NCjEDq+s=Pt;m@Wq9aLt|x>hV~=jp!f%?}?|DBe#dZY!%Zic8vs>T+5K)Hn z-JHouTd&~=evz3)!vi9qh0jKx#cTIk7$g(K+SaTsmmRmqMSOEW`TM}ZZhq;(7>B)h z;E+8T(Z!jVEf8|xr!o1!L5Up}pcPNU_r~r~F>gNaRFovKs{?E7tO5#W@>RN=+!ENY zGY43Z^SAb9;Rc*wz9S)-h>{`VrQxsy_B?lSDT9DL&Xd5|cSjbWWeQX9$HD(9Dpnah z1kO7XNbQE)f0eW4_jHITt@Gny)rHg32Sx6)THgLM*|3{4vUwSEYZ$pL)(skbuqAM| zw|e8drt40KPX7F90wpyn5>aQ)kA{%!weNoqzKKd!^X2-v0MVE0upKUVta>0qj374C zeV)4$%@te<2`XxKD_1<@y)TC#>!rmF~@PB5hT!L+lnA05oy4Cvn zt9OSE__EId^7ct|NzN^JOLP6^+8gn2yErx%vb(L1Wa(>i6a~sQD@{qT5fn-?`p)cy) zM=v^l#T`&K=X-buPbtGOFFOXgfj<4_+;I zb4pbEWP@LXT1lC&FSN~+wmi+|IolVuNf-_JD=Lk8Mi9Sun+3zxd~0ErQ`r!gol%LA zKT2O6%shqlsYFK_ebk!=CXwvmp=eu4w&ZyhtLm?>Fa$h;GW;W)(Sc^)v zw6C1V7Ydj{h`^N6rHF%=jwtCRmV%jD;)5M%=Xu@>MyT&93I_D6bZY(to6~-S$1Wxnj|gzn^*Lzz65jUM?0=>V=XbS6X5#|X^H)cS?f)NWk7yNla5W! zfkB3Ik~sao=V2-!?9n@f*y$DbHv>IB@&7SFTskTs;|`5lGSp-rJ2D0vYdjWil>E}d zi&ldEhdQG*J9`??gKETn+@)$J({(Se4WHH{I|YLd_X6`ow04a_K09y)qID~7U^^;l z#j)o;_O|Gz@O*g$k@7F&Hw6YZPg3ut#q33@&aA1t=1*8F)p^Hryf?n*WO3L~er8E{ z2f1jGne$6P^8p5wCtuf8wSP?@ku>j*cZcT++ z2YY%RPN}vm8SqNodfWGAg+-+DJJmz&sW&1cvkpZb4-?YMU`O`2 zrZ)};N|{Eq9aG>3T~BTvURk)D!;{6!N}u4hMul^MeUy_^hE=aN`t|<$kfk1ltxVBHURTjz^x?1_Nb76ku4TH^8%-#sM+* ziV-T;w5uvLW?za1{p+tNngFy+<+UbZ)wM+w?<+j5IvO3_W4iV*m2EImE%ZE*t?A^T z+Wz-Q6vUahr=Eph(=k;M&phk_t%y|SUKf*V-fi8#P{!UAZ12|lBCA3h_92vv7E z1z&Ka{Nic|j}mEGY{B*%pE3z+t`8!&H_Kv<%tZG&TVpU7%?EQ4hLO46lBVnxX43EB zcD<6_Crgc#1>fBC`?={vh+$B77t^wU08c7e*{1ic&OYiDFP<( zfAa=bNZUVBZ378dopbRpqSwfUD~9rcMgXYNvmBAnMwUGu0o)wfu$I0M>my3e8IIzo)gJaAq&cWVOQJ8+Xo_I7Dy|*J)xcAx6}OZHjkw5 ztglDM8b_wRYilc%ZpqB-o}3)`QCGh&2nzsTe*NUVw%&BJE7Cl8+@MxUFk$$+efhHh z2OBRZ`;c?Y<3{|nC@f$YO5$}sC0=emjt%=6ToRSf2r{w*Gm18o-V!8NZ%#QXnjpD` z{ziTP`UGWwdKe6-xyJ(pdIO!Z{|nv9U2?o?T^w=ybQCI=;hKOqTm-nr#|Mmc0tu&e n{_jI&W`Q^GW#9ilW4nj~2^@TuH}3X7f7Hw7wq_(#@5KKA;Kw@N diff --git a/cinema/gb/window/rfs-hud/baseline_0011.png b/cinema/gb/window/rfs-hud/baseline_0011.png deleted file mode 100644 index 3348062175dfb40f9b139a6ab275edaf5ef506d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3779 zcmd6q`8(8K|Ht3R5XKTpl))%VwxmQd5>fVS+3wLNB(h}7HZvkyCE9FZ#+I>-r6gOU zQn<5bkS2RshA~;*<}<^4-1E8a`+xX;e>vBAo#%C4*Ylj~ydLMAbbDJ1xR9(6008jI zmS$H0fQQ=!W(0Y;?G2>1004+SxNLU8DY}4Os2Dwe_Fy-9gTLUrmT-T=3C}Up9Glq& z55wCtTGUPr>b*~~p{e~1BGuPZrMJKHKc3JUX*3|1J@K{54w}e@IOIBXcjS?CBb+@u zJG;jAr_IXmhh8$$(u|=`Q^%EJtem?JJ-sTV*r;(%KGReXdO9^9TWW}sz;MDHs6M-- zu0xAa*}jyd(ms!)d(Dd>7_H{$GZ+f$M};RWXcV`zfDV}dx|mtM8IPOF!WG!Xan_TU zyp{o_#9iq2RJ;Y=_$Wo}D)f4qN<$s#V_GVeV_6XjO0ihnl)?e#&Ii*R`^uQ>zp&m|v0-Duq{xJD}&OOEGUbH=UtyGO3Ne$&@C zL9Y0LlIhyYP6OfTYlb~2pTn19UbKrV;zA}V8n>w>xPFW4AWzMo5T%T=G~HVD|R?Ko8L=~v{@w|Ydxkuz7r{=ymiJQ+jq>iY){W* zVcwPeB|vBhE_mIB=SD{pqpwlqG+rG^M8~6r=+4FXYLjLn@9EcTXU3{WGxIZhhiEtq zrdGa&kDSM=xGT_DxfW2)QN=M@2pd?tZNz$W@xq0r330P6#`LznzP_@s(t+t`@po(a zmw%vc$$5(_JbE$8>ogi-dv`>886K!xunc#lnr2>vZl?UM?f6uKsr>MP9woODVD3OE zqQ5yo`Zvdu6i1s7zqGMQPn$3?zM^R|qoF^3GJ}RcDGfSKc2$(9n#$fAA0L1DQf}|0 zxr3DXb$VZ;brT>IW3@$cN_8ejb#X#Tupt^VE}@XUQpPB5_)D?`yW!_J_QwTm&RDMt z9f0}Qu>3uz64)07oye&I!vkJ+7_Bb}r_J-H$tIxwtU6EIar%}k8DBg|wj8s^31C_D zCuyPx>^L>U1iIC@zcTvF`_^k9D!WlZdLvn!%-MBG-9zI@z0az^I3mhsOcBKHRX=nl z&owwTkCL?%yJkNznrO`lY)3zO><84?S92)eqQs&NsK+sH%*kAB*6p=rUyNt91S#Wr=+|+SdxO$ANb#(^p$TaL|jTuW&bXgIDIjZR@ZS4mV3L0 zNOMA;u}Cbf+(QK!&qUltzpbO#np_kn(OJWudX2?AerIw6yew zJ9rsudj=tWbZG~=yXOh6Za^TBd}Z6!e*x)Bk3DHj;FN_9@F%h{-9BzH`*VllN{cxZ zf0_L$Y^3gcHe$+HB({ZrM(&@O7pzDRSC*kMvld&1_XiK)2ppfv!(0W5UK6kKH3e@R zAv}4(7NCjEDq+s=Pt;m@Wq9aLt|x>hV~=jp!f%?}?|DBe#dZY!%Zic8vs>T+5K)Hn z-JHouTd&~=evz3)!vi9qh0jKx#cTIk7$g(K+SaTsmmRmqMSOEW`TM}ZZhq;(7>B)h z;E+8T(Z!jVEf8|xr!o1!L5Up}pcPNU_r~r~F>gNaRFovKs{?E7tO5#W@>RN=+!ENY zGY43Z^SAb9;Rc*wz9S)-h>{`VrQxsy_B?lSDT9DL&Xd5|cSjbWWeQX9$HD(9Dpnah z1kO7XNbQE)f0eW4_jHITt@Gny)rHg32Sx6)THgLM*|3{4vUwSEYZ$pL)(skbuqAM| zw|e8drt40KPX7F90wpyn5>aQ)kA{%!weNoqzKKd!^X2-v0MVE0upKUVta>0qj374C zeV)4$%@te<2`XxKD_1<@y)TC#>!rmF~@PB5hT!L+lnA05oy4Cvn zt9OSE__EId^7ct|NzN^JOLP6^+8gn2yErx%vb(L1Wa(>i6a~sQD@{qT5fn-?`p)cy) zM=v^l#T`&K=X-buPbtGOFFOXgfj<4_+;I zb4pbEWP@LXT1lC&FSN~+wmi+|IolVuNf-_JD=Lk8Mi9Sun+3zxd~0ErQ`r!gol%LA zKT2O6%shqlsYFK_ebk!=CXwvmp=eu4w&ZyhtLm?>Fa$h;GW;W)(Sc^)v zw6C1V7Ydj{h`^N6rHF%=jwtCRmV%jD;)5M%=Xu@>MyT&93I_D6bZY(to6~-S$1Wxnj|gzn^*Lzz65jUM?0=>V=XbS6X5#|X^H)cS?f)NWk7yNla5W! zfkB3Ik~sao=V2-!?9n@f*y$DbHv>IB@&7SFTskTs;|`5lGSp-rJ2D0vYdjWil>E}d zi&ldEhdQG*J9`??gKETn+@)$J({(Se4WHH{I|YLd_X6`ow04a_K09y)qID~7U^^;l z#j)o;_O|Gz@O*g$k@7F&Hw6YZPg3ut#q33@&aA1t=1*8F)p^Hryf?n*WO3L~er8E{ z2f1jGne$6P^8p5wCtuf8wSP?@ku>j*cZcT++ z2YY%RPN}vm8SqNodfWGAg+-+DJJmz&sW&1cvkpZb4-?YMU`O`2 zrZ)};N|{Eq9aG>3T~BTvURk)D!;{6!N}u4hMul^MeUy_^hE=aN`t|<$kfk1ltxVBHURTjz^x?1_Nb76ku4TH^8%-#sM+* ziV-T;w5uvLW?za1{p+tNngFy+<+UbZ)wM+w?<+j5IvO3_W4iV*m2EImE%ZE*t?A^T z+Wz-Q6vUahr=Eph(=k;M&phk_t%y|SUKf*V-fi8#P{!UAZ12|lBCA3h_92vv7E z1z&Ka{Nic|j}mEGY{B*%pE3z+t`8!&H_Kv<%tZG&TVpU7%?EQ4hLO46lBVnxX43EB zcD<6_Crgc#1>fBC`?={vh+$B77t^wU08c7e*{1ic&OYiDFP<( zfAa=bNZUVBZ378dopbRpqSwfUD~9rcMgXYNvmBAnMwUGu0o)wfu$I0M>my3e8IIzo)gJaAq&cWVOQJ8+Xo_I7Dy|*J)xcAx6}OZHjkw5 ztglDM8b_wRYilc%ZpqB-o}3)`QCGh&2nzsTe*NUVw%&BJE7Cl8+@MxUFk$$+efhHh z2OBRZ`;c?Y<3{|nC@f$YO5$}sC0=emjt%=6ToRSf2r{w*Gm18o-V!8NZ%#QXnjpD` z{ziTP`UGWwdKe6-xyJ(pdIO!Z{|nv9U2?o?T^w=ybQCI=;hKOqTm-nr#|Mmc0tu&e n{_jI&W`Q^GW#9ilW4nj~2^@TuH}3X7f7Hw7wq_(#@5KKA;Kw@N diff --git a/cinema/gb/window/rfs-hud/baseline_0012.png b/cinema/gb/window/rfs-hud/baseline_0012.png deleted file mode 100644 index 3348062175dfb40f9b139a6ab275edaf5ef506d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3779 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 diff --git a/cinema/gb/window/rfs-hud/baseline_0013.png b/cinema/gb/window/rfs-hud/baseline_0013.png deleted file mode 100644 index 3348062175dfb40f9b139a6ab275edaf5ef506d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3779 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 diff --git a/cinema/gb/window/rfs-hud/baseline_0014.png b/cinema/gb/window/rfs-hud/baseline_0014.png deleted file mode 100644 index 7c444e0053b3f575fd9e96b6a9ac3534fa79ab4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3781 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 literal 6114 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 H-D3X-4($y{ diff --git a/cinema/gb/window/zin-head/baseline_0000.png b/cinema/gb/window/zin-head/baseline_0000.png index d3c2c0f9d552a8d7eb47eb00d52ba7bc8f895afd..41cd69861ceeb2b94e460c5c05ef21f19f4ada74 100644 GIT binary patch literal 3311 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 literal 4049 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 XeEnWQQjFW*i{12+g<+Y#^W%R3W;Ban diff --git a/cinema/gb/window/zin-head/baseline_0001.png b/cinema/gb/window/zin-head/baseline_0001.png index 5d583d227d75f550291cd67cb4f75ea43a56755d..f8e0b3711f9bdf30f4407901fe87ef361db7183f 100644 GIT binary patch literal 3277 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 LNkvXXu0mjfX8&be literal 4010 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 diff --git a/cinema/gb/window/zin-head/baseline_0002.png b/cinema/gb/window/zin-head/baseline_0002.png index 5d583d227d75f550291cd67cb4f75ea43a56755d..f8e0b3711f9bdf30f4407901fe87ef361db7183f 100644 GIT binary patch literal 3277 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 LNkvXXu0mjfX8&be literal 4010 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 diff --git a/cinema/gb/window/zin-head/baseline_0003.png b/cinema/gb/window/zin-head/baseline_0003.png index 5d583d227d75f550291cd67cb4f75ea43a56755d..f8e0b3711f9bdf30f4407901fe87ef361db7183f 100644 GIT binary patch literal 3277 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 LNkvXXu0mjfX8&be literal 4010 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 diff --git a/cinema/gb/window/zin-head/baseline_0004.png b/cinema/gb/window/zin-head/baseline_0004.png index 5d583d227d75f550291cd67cb4f75ea43a56755d..f8e0b3711f9bdf30f4407901fe87ef361db7183f 100644 GIT binary patch literal 3277 zcmV;;3^MbHP)0058(0ssI20N3}|000b>NklJ2rB$rbh z%IOAu-{*e15DsjgzVEf_zVEvUcP@7rhOX;;eM#JIH?0pB`fSMXcsy|J)04MH!k61; z7zPpPx^5VT*XxD!d;XR;Kv&>CVfu#(=hJhyN5Vw>HFSfNYBCLald{f=T2Ia9%DW}s(q4`rU~|%{v8}u?^Up-efXt~ zC-y}ze+`ENZ^>pB|0g21+YRgWh8R$zhbX}fA)ym?BRDu3!NKuQDqgM|t_Xc=x{FBH zbz?YN|BnN2(rt(ijz(~Btb7l?IcWOh@hDv9@|(m${z}1MwA-uvTz+*Pm`agfQwr@+ z`A{o>_u#)3*0|h~WitDsbavOAxb`KOdkgt%*J?Y}oZgPA>1aNazSQpOBOmrEKbaqnKQ3RNnxCE9Bqz^jv08&w zM9yhSMwd4aV@epO7$W?X%U=NJgj9Q#pUiI_A6n~&E^~{QXBXr&_;0Wtmk?|oV@!=p ze!TJ}_=d~nFCf`#_bNY^-!LTew@rR_zFyjK>){Fhn}bcJ8iI4`Yg8whlhb{rx%@f! z#?ssODnFOsD$4xY%a)U8FXX&QYY0v*5X^&_G0OK`|L{3`OZmZk2AR)0+sn`8;ik+@ zRmpN#p1qJGcuiDgvZXjBcb&`6GUf8;kdx$db5e*%r* z;AsBfuxS3^$Y}oHUqK@{IJOeJm;cqfR2TV8%YNDKxM0tTO$7V)f=5gjZtNI0mbr2{ z@cn7dGBL{TFbrC+Uf0z73s_I^UjA2Kjsm+~%fuA?vg`cH!LX9xBrDi9X&PPAFcSPM zGI9J$O*y<9TJw~nTR196^K-1skB`qH%QaYb^1tTFF}KvHVA3zkb^QW%^9PSR`CoJ8 z6mH4kt$+HL(F`5I(FhKXMsRR6f`g+G92||{;AjK~M-e#!5LHiakeJs9iuCQ06ZVD?&#WR*mv-o}>n+M055`*Cyi8X36i zMe-Y|eB+qLJjBnjo3laQ?f2z9vfe8!E{M~61(JT{w|-w=FWi?#nYPH!`=PmTrukfc zjujeQ-tQ~)v~V6E#rJDd$e7tjo7<0Du9qLv=dYBXe=T@3O}&K%`~-H}U0B}lJ5sZn z^Ba0Ns*?m5ry89G=k->BMcsycr9BPqe z*p(Ec_(@f~>$=>hK4Tyb!93j-G?M8@&_#fc7UvL$U{>F^nK2pbErFFd)EumMJE5`? z$Nr+cgwbF=R;MPvSM;c(bP$4du$5{f2IvgG)CxkdqH+Qj>IZFzz7ot^Z#gHf&l14= z8H6IZUV~*);^*@jTZw}Z{CqxjTT!J3qbtB<9o3i>gkYI8a)k!#zflM3AOu4r>qlwU zV2SHP3_`GC=_oBC!!QIMpCt^zN|O48lrtQO$Tkq9==JOMVww+>|AUCJvmq(7@?A*L ze?Re|x$omwb~f-40RH_)4PMCbcs!!6t^N>0gR%E8Ih*$M-BE?lcDYA32(H08(yB)C zE<(NFgT-~KR*baqFzPxh2*E;bgTC((i1T-X#RGK@wYpCuB(7Rz=?)vaWm*rz}v5;40bAX^f5&KpjvEau$)JOcbtI1 zS#s~F;zzbM$k{Y_3vdWAfBjIQimQn_Xv4&z-iWZ?{xfJWzqf2rDa^h)IKz>kDJB9- z*@cRmnL8AY^#>!Sf)A5j7hEB!<3qJ%Qx~2+dGAG$^9LWM!TfauG(87NZCq{Xh5ueO zQpU+=9C&<|qvl}5GIDo&KA*#c)y47!V(@gt&XugaDk{wf5X{C0D6Y&`wr~T~mnk&G zVp7ML@5ck~4S{Wz-zHd>uP`SGDK0W#m5XoK-Bn#$BW*yXk`-sG@U$?|c{P zMJ@ccb}gJmgN5{l;~m)(fYlZPss-FK`wgUr3Wrt@MSgHJRRddko8<-yH3<~^7#P0EmQn#tRwvSbiavB^b1?t6PO9pu1!YzmXOiKZ{`)?zl1>Hx0fPyh7^SbeHM9#mrT~ z{G;r3&h0Y2G;r3R0ukVMtZ10vVCrj@6P8JSB~9u)EWL=bUVA%4#7tGSC)@d{#!^t5F833v~|BAC&F}$+uMZi94P-% z6rML-K0C(ow~&4yj2Lg_)}G14+j?Y)A5ipw{%wuQ3J4> zI|V?EQyf+4pM_I=V36KhP-S%G6&$~f?pEOVnDRh{KsM9b9+u#4ejtqyVVa0gMR3eU zB2&{RY(`K)h}Tcse-Rsuvt=QMkDKJ5K&sxGG-T?EYK+&1I0kgo99V0>%*=^Z@&hpgHBXhyZLBLo7= zoGEwhz6#)5#e+ED8U|R zXPyVSr%FmK^j4hckYAn z-vQ*rt_$;Cfc+nmVld(N_L=yBkMhPqgA3!cUSRW?K3Z9WIloa{w4=~=8;Eg;!%>9< z$7O02*}#U}4M!c_iO!oOxG-PvdC>s6sd@aj^G-K?IN+#u0LO2sRb*e2ux1|Sr_t;$ z@dKyk>d<2Z#f&lj^wFTyxF?KODf*va}?I;jcEdYeZ1UR!o0nz#;EsxZxUXO z_7HC?b}=C>H3q#c@XM%YSL!#P9lLDa4!qaN^vZFD>1G`kE#{9u>8>7Iw2h6}Y|>d# z=5VQRJXE<0j}26V4C`*>Ex)o;1o+|FUmxZi*&nP(HpJl!eGUHsU8hV|NaNvc00000 LNkvXXu0mjfX8&be literal 4010 zcmc&%c{tQ<+x{{3$dm}lFtTNhhDX_zU5U_Q>_P}*8~a#C$R1&Yv0{U1z z_-N{rxC7^}J()bkA@T?8$_J-XQ#R3Hmqe)z)h}es!7{pOllp}$oBMo;N}sE37AV5+ z;}rT4_!;7E#(Yq7-$8pqOPG+N8BYU|);DS}*FWTTHwWB7i?q*KpoR+vLt@Fn2kD&Y zN#9b2(^^`PQR|e9Su&NK&aTbDEp7NvyX2LLf*FqRxzMgCdXP#dXQ(zQ?^rsSv8%n-3lh{xv3PciFRg2S-dp=JLT4m zq8{-f1DmUr9KWeNx=lYG@u!J7i)1<3EX}d*`3JJ}-hKZ98_g(!Eddfe>2XPYXGzKL zWo$cVz%hHAc7;5M3%EQcCkLLyri9}n4-9M5^lfL`Q^LB9c_%R*Bu&jYd z2Ue1=oj;iqGf?nu{Dg?jVZjU4keAaC`^&-MJ1kJ=%+WMst>6}E_kkcxqitj=RQ}Uo z`UJ9$O=KckSz)@4Vb13CIfF-*Qmi+%5ZI%vsC74uzPR3HtrzU?Y=} zFvKyP+gJO~7m4L&kw;jWuRje&plTre+=>zy*0MO|kDVPE-vp(AIYACoQ^FR|*?~j} z{>i2sXU#hfoN+NP{Hu(75LwYwEMSBgBtOZgJHo5Q^}S} zdsecZ8@y`+=T9RBx?Jgc)TUTt6LKJx^eKP&qh3tV;AfU;K#+RZL7xs9ybU654_A# z{C*n$n2T-W#_-d~BV1EV%uH1Hk4;T37t-CLqx2);7$fx%`Q`kEdL6yU)~H&()$$f$ z-&+yJi0!*VIkqjK5%&4Y!SF2Bh-Elc6_*4_4SB}3au9iAkoSdZ8`boo`&)+3E3_3D ziCBgL%jup9dnZohP@&O@D;*k>XS$2#?W4GLB-<_u5V$vT-OK(Iv$}GHJ`J7V$xW8X zfYqi(KGL9*0=K=pdu$f%j~+fxx$)7qaT6Fq!L-jcGn?COL|Hv>YfH;+IhqP)nKQ__ zpQaTIZ;i5AoJ>EOg7^3|rqd_P0q<2l?MJQQ5n&P;9RodY7rqTw*{4Ac%r2+M(}NeZ zLaf6Lbn4er;RkpYj^ZadNYuQXkAFas1Lw)9o}`@a9Yi>Z(XEpdti)$|^s zXhj84;bfwBM83qsc4fW5m?zul>`z3=x6t+7t6F8h^8A>J3l8E>!}~!x_YYrU?{}X< z$D$On7v~~m+*zRdNamzt`Hcy9X6RGZUcj&Vq zU=iI9mW+*1N(4G8uKAQP%-gHPg&!mH7vqgF0bJl;Vrx&2k6raGd0r%#sKVg9MElTDWFCr~DT!TuQ?Rh@!7F^a9->OdXeP-z)X?=u%;M%YdTC znX0!*^K}2^kT0B@~!7v0VP0AT7&NdH3=f2&vWc0azm$+he@1Z>AZ>JlZg zX%iq9d5sLki&xM~WDnWrYmmkiG2pV-HPD{zSAo~jg5)ipTIwjv%|#8-7YFJM6mz~ z{mpmG6Y`JpLE_z6w!4yevgN0NU5YgeTcR$ii- z0_?!Pnq~%RX&$8J!Tq+`-_}f3f}=ZqJ(i2!>#d?sFrkpPcOD{o?JGkf>S%C6@cAgZ)BlQjNM9o0u-@DUbhg?;DM&uS2a@zPU zR-DyXl;H9@(Y_LOO(2_^Ec_>FWhXHUt?4&BQT8P`XY|EKK9v*Im>-v1dxBlot8O|HXW(y=J%7ZT9dVPRLiW*{ zW;RQLbPX6yHExxDVz|UbCu09q`pr0<{P(Op!Xb|IU5lm}y%DW~3Qmol`?GBHg!CU# zq7vr{sAH#|E;el69ACt%W$ZZH1!~hBa5tCa9rV=#k-xF?No`@w2Go0 zkIGLmkg1t*38))cycxULqaPhqtu_ln=lLuo1{n1FB1fFQT&vj{NZOrW{P9_$xuQJ> z76sNQg^R8a2a~|Y))IEz&_PFp*1ATdQeR=;l5#u6dO(jZVZ}&L_{zU^xX*dZE4T00 zeZr>vr~DI;z%fgB@3WJQ=w&gAf&Q(!ySXwa@wHKOjry4vGO!WlCO(Tq})+jy?1=sui1KyK z>W75_;~o1UqT4K2$FyxO%<0ad%edw)`WTM^@jGc=4t}<{dIVQ-nkuu_s%+VUP{tDz zp>pvog7yR@zN2_ToMH`f0hNY^6-ymvGD_9;D4s44*6m*0QJoC5aPE?kkK}T97^N_C z6q^R|pK;dgKNvrQ&#qFB*Eb}+LB6qLEhc48w@k#uVHsq4V diff --git a/cinema/gb/window/zin-head/baseline_0005.png b/cinema/gb/window/zin-head/baseline_0005.png index d3c2c0f9d552a8d7eb47eb00d52ba7bc8f895afd..41cd69861ceeb2b94e460c5c05ef21f19f4ada74 100644 GIT binary patch literal 3311 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 literal 4049 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 XeEnWQQjFW*i{12+g<+Y#^W%R3W;Ban diff --git a/src/platform/python/cinema/movie.py b/src/platform/python/cinema/movie.py index d1a8d9f60..5f5402c99 100644 --- a/src/platform/python/cinema/movie.py +++ b/src/platform/python/cinema/movie.py @@ -8,15 +8,17 @@ Output = namedtuple('Output', ['video']) class Tracer(object): def __init__(self, core): self.core = core - self.framebuffer = Image(*core.desired_video_dimensions()) - self.core.set_video_buffer(self.framebuffer) self._video_fifo = [] def yield_frames(self, skip=0, limit=None): + self.framebuffer = Image(*self.core.desired_video_dimensions()) + self.core.set_video_buffer(self.framebuffer) self.core.reset() skip = (skip or 0) + 1 while skip > 0: frame = self.core.frame_counter + self.framebuffer = Image(*self.core.desired_video_dimensions()) + self.core.set_video_buffer(self.framebuffer) self.core.run_frame() skip -= 1 while frame <= self.core.frame_counter and limit != 0: diff --git a/src/platform/python/cinema/test.py b/src/platform/python/cinema/test.py index dd47708f9..fdd333fd5 100644 --- a/src/platform/python/cinema/test.py +++ b/src/platform/python/cinema/test.py @@ -3,7 +3,6 @@ import os.path import mgba.core import mgba.image import cinema.movie -import itertools import glob import re from copy import deepcopy @@ -73,7 +72,7 @@ class VideoTest(CinemaTest): self.tracer = cinema.movie.Tracer(self.core) def generate_frames(self): - for i, frame in zip(itertools.count(), self.tracer.video(**self.output_settings())): + for i, frame in enumerate(self.tracer.video(**self.output_settings())): try: baseline = VideoFrame.load(os.path.join(self.path, self.BASELINE % i)) yield baseline, frame, VideoFrame.diff(baseline, frame) @@ -85,7 +84,7 @@ class VideoTest(CinemaTest): assert not any(any(diffs[0].image.convert("L").point(bool).getdata()) for diffs in self.diffs) def generate_baseline(self): - for i, frame in zip(itertools.count(), self.tracer.video(**self.output_settings())): + for i, frame in enumerate(self.tracer.video(**self.output_settings())): frame.save(os.path.join(self.path, self.BASELINE % i)) From 5ceec845601788b9d9d3862555380793457fdc44 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Wed, 24 Jun 2020 04:37:58 -0700 Subject: [PATCH 09/21] Test: Initial CInema testing --- src/platform/test/CMakeLists.txt | 1 + src/platform/test/cinema-main.c | 189 ++++++++++++++++++++++++++++--- 2 files changed, 172 insertions(+), 18 deletions(-) diff --git a/src/platform/test/CMakeLists.txt b/src/platform/test/CMakeLists.txt index 4f7056d53..8882b8d94 100644 --- a/src/platform/test/CMakeLists.txt +++ b/src/platform/test/CMakeLists.txt @@ -42,4 +42,5 @@ if(BUILD_CINEMA) enable_testing() add_executable(${BINARY_NAME}-cinema ${CMAKE_CURRENT_SOURCE_DIR}/cinema-main.c) target_link_libraries(${BINARY_NAME}-cinema ${BINARY_NAME} ${PLATFORM_LIBRARY}) + set_target_properties(${BINARY_NAME}-cinema PROPERTIES COMPILE_DEFINITIONS "${OS_DEFINES};${FEATURE_DEFINES};${FUNCTION_DEFINES}") endif() diff --git a/src/platform/test/cinema-main.c b/src/platform/test/cinema-main.c index eebae90a9..60bc2fe79 100644 --- a/src/platform/test/cinema-main.c +++ b/src/platform/test/cinema-main.c @@ -10,6 +10,7 @@ #include #include +#include #include #include @@ -40,6 +41,7 @@ enum CInemaStatus { CI_FAIL, CI_XPASS, CI_XFAIL, + CI_ERROR, CI_SKIP }; @@ -47,7 +49,6 @@ struct CInemaTest { char directory[MAX_TEST]; char filename[MAX_TEST]; char name[MAX_TEST]; - struct mCoreConfig config; enum CInemaStatus status; int failedFrames; }; @@ -55,12 +56,20 @@ struct CInemaTest { DECLARE_VECTOR(CInemaTestList, struct CInemaTest) DEFINE_VECTOR(CInemaTestList, struct CInemaTest) +DECLARE_VECTOR(ImageList, void*) +DEFINE_VECTOR(ImageList, void*) + static bool showVersion = false; static bool showUsage = false; static char base[PATH_MAX] = {0}; static bool dryRun = false; static int verbosity = 0; +bool CInemaTestInit(struct CInemaTest*, const char* directory, const char* filename); +void CInemaTestRun(struct CInemaTest*); + +static void _log(struct mLogger* log, int category, enum mLogLevel level, const char* format, va_list args); + ATTRIBUTE_FORMAT(printf, 2, 3) void CIlog(int minlevel, const char* format, ...) { if (verbosity < minlevel) { return; @@ -81,9 +90,6 @@ ATTRIBUTE_FORMAT(printf, 2, 3) void CIerr(int minlevel, const char* format, ...) va_end(args); } -bool CInemaTestInit(struct CInemaTest*, const char* directory, const char* filename); -void CInemaTestDeinit(struct CInemaTest*); - static bool parseCInemaArgs(int argc, char* const* argv) { int ch; int index = 0; @@ -139,7 +145,7 @@ static bool determineBase(int argc, char* const* argv) { } static bool collectTests(struct CInemaTestList* tests, const char* path) { - CIerr(1, "Considering path %s\n", path); + CIerr(2, "Considering path %s\n", path); struct VDir* dir = VDirOpen(path); if (!dir) { return false; @@ -197,7 +203,6 @@ static void reduceTestList(struct CInemaTestList* tests) { ++i; continue; } - CInemaTestDeinit(cur); CInemaTestListShift(tests, i, 1); } } @@ -218,7 +223,134 @@ bool CInemaTestInit(struct CInemaTest* test, const char* directory, const char* return true; } -void CInemaTestDeinit(struct CInemaTest* test) { +void CInemaTestRun(struct CInemaTest* test) { + struct VDir* dir = VDirOpen(test->directory); + if (!dir) { + CIerr(0, "Failed to open test directory\n"); + test->status = CI_ERROR; + return; + } + struct VFile* rom = dir->openFile(dir, test->filename, O_RDONLY); + if (!rom) { + CIerr(0, "Failed to open test\n"); + test->status = CI_ERROR; + return; + } + struct mCore* core = mCoreFindVF(rom); + if (!core) { + CIerr(0, "Failed to load test\n"); + test->status = CI_ERROR; + rom->close(rom); + return; + } + if (!core->init(core)) { + CIerr(0, "Failed to init test\n"); + test->status = CI_ERROR; + core->deinit(core); + return; + } + unsigned width, height; + core->desiredVideoDimensions(core, &width, &height); + ssize_t bufferSize = width * height * BYTES_PER_PIXEL; + void* buffer = malloc(bufferSize); + if (!buffer) { + CIerr(0, "Failed to allocate video buffer\n"); + test->status = CI_ERROR; + core->deinit(core); + } + core->setVideoBuffer(core, buffer, width); + mCoreConfigInit(&core->config, "cinema"); + + core->loadROM(core, rom); + core->reset(core); + + test->status = CI_PASS; + + unsigned minFrame = core->frameCounter(core); + unsigned limit = 9999; + size_t frame; + for (frame = 0; limit; ++frame, --limit) { + char baselineName[32]; + snprintf(baselineName, sizeof(baselineName), "baseline_%04" PRIz "u.png", frame); + core->runFrame(core); + unsigned frameCounter = core->frameCounter(core); + if (frameCounter <= minFrame) { + break; + } + CIerr(2, "Test frame: %u\n", frameCounter); + + struct VFile* baselineVF = dir->openFile(dir, baselineName, O_RDONLY); + if (!baselineVF) { + test->status = CI_FAIL; + } else { + png_structp png = PNGReadOpen(baselineVF, 0); + png_infop info = png_create_info_struct(png); + png_infop end = png_create_info_struct(png); + if (!png || !info || !end || !PNGReadHeader(png, info)) { + PNGReadClose(png, info, end); + CIerr(1, "Failed to load %s\n", baselineName); + test->status = CI_ERROR; + } else { + unsigned pwidth = png_get_image_width(png, info); + unsigned pheight = png_get_image_height(png, info); + unsigned twidth, theight; + core->desiredVideoDimensions(core, &twidth, &theight); + if (pheight != theight || pwidth != twidth) { + PNGReadClose(png, info, end); + CIerr(1, "Size mismatch for %s, expected %ux%u, got %ux%u\n", baselineName, pwidth, pheight, twidth, theight); + test->status = CI_FAIL; + } else { + uint8_t* pixels = malloc(pwidth * pheight * BYTES_PER_PIXEL); + if (!pixels) { + CIerr(1, "Failed to allocate baseline buffer\n"); + test->status = CI_ERROR; + } else { + if (!PNGReadPixels(png, info, pixels, pwidth, pheight, pwidth) || !PNGReadFooter(png, end)) { + CIerr(1, "Failed to read %s\n", baselineName); + test->status = CI_ERROR; + } else { + uint8_t* testPixels = buffer; + size_t x; + size_t y; + for (y = 0; y < theight; ++y) { + for (x = 0; x < twidth; ++x) { + size_t pix = pwidth * y + x; + size_t tpix = width * y + x; + int testR = testPixels[tpix * 4 + 0]; + int testG = testPixels[tpix * 4 + 1]; + int testB = testPixels[tpix * 4 + 2]; + int expectR = pixels[pix * 4 + 0]; + int expectG = pixels[pix * 4 + 1]; + int expectB = pixels[pix * 4 + 2]; + int r = expectR - testR; + int g = expectG - testG; + int b = expectB - testB; + if (r | g | b) { + CIerr(2, "Frame %u failed at pixel %" PRIz "ux%" PRIz "u with diff %i,%i,%i (expected %02x%02x%02x, got %02x%02x%02x)\n", + frameCounter, x, y, r, g, b, + expectR, expectG, expectB, + testR, testG, testB); + test->status = CI_FAIL; + ++test->failedFrames; + } + } + } + } + } + PNGReadClose(png, info, end); + free(pixels); + } + } + baselineVF->close(baselineVF); + } + } + + free(buffer); + core->deinit(core); + dir->close(dir); +} + +void _log(struct mLogger* log, int category, enum mLogLevel level, const char* format, va_list args) { // TODO: Write } @@ -256,6 +388,9 @@ int main(int argc, char** argv) { struct CInemaTestList tests; CInemaTestListInit(&tests, 0); + struct mLogger logger = { .log = _log }; + mLogSetDefaultLogger(&logger); + if (argc > 0) { size_t i; for (i = 0; i < (size_t) argc; ++i) { @@ -298,20 +433,38 @@ int main(int argc, char** argv) { reduceTestList(&tests); } - if (dryRun) { - size_t i; - for (i = 0; i < CInemaTestListSize(&tests); ++i) { - struct CInemaTest* test = CInemaTestListGetPointer(&tests, i); - CIlog(-1, "%s\n", test->name); - } - } else { - // TODO: Write - } - size_t i; for (i = 0; i < CInemaTestListSize(&tests); ++i) { struct CInemaTest* test = CInemaTestListGetPointer(&tests, i); - CInemaTestDeinit(test); + if (dryRun) { + CIlog(-1, "%s\n", test->name); + } else { + CIerr(1, "%s: ", test->name); + CInemaTestRun(test); + switch (test->status) { + case CI_PASS: + CIerr(1, "pass"); + break; + case CI_FAIL: + status = 1; + CIerr(1, "fail"); + break; + case CI_XPASS: + CIerr(1, "xpass"); + break; + case CI_XFAIL: + CIerr(1, "xfail"); + break; + case CI_SKIP: + CIerr(1, "skip"); + break; + case CI_ERROR: + status = 1; + CIerr(1, "error"); + break; + } + CIerr(1, "\n"); + } } CInemaTestListDeinit(&tests); From 7973d70b042a79da2d1cd10c544608e259057478 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Thu, 25 Jun 2020 01:24:30 -0700 Subject: [PATCH 10/21] mVL: Add parameter for closing the video log backing --- include/mgba/feature/video-logger.h | 2 +- src/feature/video-logger.c | 6 +++++- src/gb/core.c | 4 ++-- src/gba/core.c | 4 ++-- src/platform/qt/CoreController.cpp | 5 ++--- 5 files changed, 12 insertions(+), 9 deletions(-) diff --git a/include/mgba/feature/video-logger.h b/include/mgba/feature/video-logger.h index b40caff6d..2530d3fa2 100644 --- a/include/mgba/feature/video-logger.h +++ b/include/mgba/feature/video-logger.h @@ -117,7 +117,7 @@ void mVideoLogContextSetOutput(struct mVideoLogContext*, struct VFile*); void mVideoLogContextWriteHeader(struct mVideoLogContext*, struct mCore* core); bool mVideoLogContextLoad(struct mVideoLogContext*, struct VFile*); -void mVideoLogContextDestroy(struct mCore* core, struct mVideoLogContext*); +void mVideoLogContextDestroy(struct mCore* core, struct mVideoLogContext*, bool closeVF); void mVideoLogContextRewind(struct mVideoLogContext*, struct mCore*); void* mVideoLogContextInitialState(struct mVideoLogContext*, size_t* size); diff --git a/src/feature/video-logger.c b/src/feature/video-logger.c index e28e20ac1..e25b1a44c 100644 --- a/src/feature/video-logger.c +++ b/src/feature/video-logger.c @@ -723,7 +723,7 @@ static void _flushBuffer(struct mVideoLogContext* context) { } } -void mVideoLogContextDestroy(struct mCore* core, struct mVideoLogContext* context) { +void mVideoLogContextDestroy(struct mCore* core, struct mVideoLogContext* context, bool closeVF) { if (context->write) { _flushBuffer(context); @@ -751,6 +751,10 @@ void mVideoLogContextDestroy(struct mCore* core, struct mVideoLogContext* contex #endif } + if (closeVF && context->backing) { + context->backing->close(context->backing); + } + free(context); } diff --git a/src/gb/core.c b/src/gb/core.c index a3dd7dd79..b42bcbf1e 100644 --- a/src/gb/core.c +++ b/src/gb/core.c @@ -1066,7 +1066,7 @@ static bool _GBVLPInit(struct mCore* core) { static void _GBVLPDeinit(struct mCore* core) { struct GBCore* gbcore = (struct GBCore*) core; if (gbcore->logContext) { - mVideoLogContextDestroy(core, gbcore->logContext); + mVideoLogContextDestroy(core, gbcore->logContext, true); } _GBCoreDeinit(core); } @@ -1095,7 +1095,7 @@ static bool _GBVLPLoadROM(struct mCore* core, struct VFile* vf) { struct GBCore* gbcore = (struct GBCore*) core; gbcore->logContext = mVideoLogContextCreate(NULL); if (!mVideoLogContextLoad(gbcore->logContext, vf)) { - mVideoLogContextDestroy(core, gbcore->logContext); + mVideoLogContextDestroy(core, gbcore->logContext, false); gbcore->logContext = NULL; return false; } diff --git a/src/gba/core.c b/src/gba/core.c index a1cd7f187..c8f9c7348 100644 --- a/src/gba/core.c +++ b/src/gba/core.c @@ -1224,7 +1224,7 @@ static bool _GBAVLPInit(struct mCore* core) { static void _GBAVLPDeinit(struct mCore* core) { struct GBACore* gbacore = (struct GBACore*) core; if (gbacore->logContext) { - mVideoLogContextDestroy(core, gbacore->logContext); + mVideoLogContextDestroy(core, gbacore->logContext, true); } _GBACoreDeinit(core); } @@ -1253,7 +1253,7 @@ static bool _GBAVLPLoadROM(struct mCore* core, struct VFile* vf) { struct GBACore* gbacore = (struct GBACore*) core; gbacore->logContext = mVideoLogContextCreate(NULL); if (!mVideoLogContextLoad(gbacore->logContext, vf)) { - mVideoLogContextDestroy(core, gbacore->logContext); + mVideoLogContextDestroy(core, gbacore->logContext, false); gbacore->logContext = NULL; return false; } diff --git a/src/platform/qt/CoreController.cpp b/src/platform/qt/CoreController.cpp index 5ecca6870..99fc0299d 100644 --- a/src/platform/qt/CoreController.cpp +++ b/src/platform/qt/CoreController.cpp @@ -871,9 +871,8 @@ void CoreController::endVideoLog(bool closeVf) { } Interrupter interrupter(this); - mVideoLogContextDestroy(m_threadContext.core, m_vl); - if (m_vlVf && closeVf) { - m_vlVf->close(m_vlVf); + mVideoLogContextDestroy(m_threadContext.core, m_vl, closeVf); + if (closeVf) { m_vlVf = nullptr; } m_vl = nullptr; From 7b32b2a63a5cf8086a969282f42edaf087428cb9 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Thu, 25 Jun 2020 01:38:41 -0700 Subject: [PATCH 11/21] CInema: Remove grayscale PNGs --- .../mgb_oam_dma_halt_sprites/baseline_0000.png | Bin 466 -> 0 bytes .../sprite_priority/baseline_0000.png | Bin 560 -> 702 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 cinema/gb/mooneye-gb/madness/mgb_oam_dma_halt_sprites/baseline_0000.png diff --git a/cinema/gb/mooneye-gb/madness/mgb_oam_dma_halt_sprites/baseline_0000.png b/cinema/gb/mooneye-gb/madness/mgb_oam_dma_halt_sprites/baseline_0000.png deleted file mode 100644 index 78773f1a841361789c0778417da1f8003b986ac0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 466 zcmeAS@N?(olHy`uVBq!ia0vp^3xIe62asS`bDyMij3bW*0J*sd}X7_u( zOOLwgxz`fEHj|CAW_Ry=L0=ltzLls;31gk6l^8+9kFW@Nm~yMsTcF@~38 zM&5zi1nwtU4hKq@-x1{mn-9```wnLE*V;w`eW_aF8c~vxSdwa$T$Bo=7>o=IO?3?o zbPbF`jEt=e%&ZJdwGDs_gF_7O+)*^-=BH$)RpQpLIX3J!Py>UftDnm{r-UW|^)H>C diff --git a/cinema/gb/mooneye-gb/manual-only/sprite_priority/baseline_0000.png b/cinema/gb/mooneye-gb/manual-only/sprite_priority/baseline_0000.png index e35683164dcfbb5435767d753a4462ddc70f3ec5..64aac5965f02116930f8bbf449b9020e5142f56e 100644 GIT binary patch literal 702 zcmeAS@N?(olHy`uVBq!ia0vp^3xIe62NRHFxc>b*0|Qg5r;B4q#jUru0*jgq7#J=t zd0hKZwWrNjY`@bUOt+vg@0?Rn7?f2;Ym-hU_LA%p?pq$0qWG6hY!Xxm z)vO(-zf3YbCgAkFdxOOF_z6!BM*h8U?a#ZaR|i+S?s{!$_3!1kITuqNYS-S?Oj!F9?e51uFNIC!QjUz14Hef>K?7J6n UUlEr~+zLvUp00i_>zopr02T&BTmS$7 literal 560 zcmeAS@N?(olHy`uVBq!ia0vp^3xIe62asS`bGZqKA zJ29*~C-V}>QAqX(@?~JCQe$9fXklRZ1r%y{!N5>zz`*b-fq}tl1_Oh5!JJ)zHb4oc zByV>YhX3vTXZ8b4vGa6s45_&F_WEhQW&<9V!2cWn*Sm&t9O0aj$CP|zuIt)ojeg9U zUA`xivltv25cq&~!@G59bC~w;+T+xa&#>&i%1&m11y&4hrd_9eVOCaQ(C$rdYov?%&*v2$ zkNLezbk%~p{Cm<^A9u;x{joRmua#SOPi5yPmj(ImBK-5cKmKemkQcP+`}%i>MY&Ev zRKEu6rp|4fyVu{9TXp@V?{C%vA&eXWbJ-cDhu@s>pQVA5`2*{LCqNtq)Hj@jI+$E)vfK~GXZ3y0Y$jg&4h&b-64!{5l*E!$tK_0oAjM#0U}&mq07S+i zh89+a2397<+6Kl}1_tfw$3;;zbP0l+XkKZlT3a From e1bd52a3d08b99168c586fc8d4d002be44965899 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Thu, 25 Jun 2020 01:40:05 -0700 Subject: [PATCH 12/21] Test: Add initial configuration bits to CInema --- src/platform/test/cinema-main.c | 154 ++++++++++++++++++++++++++------ 1 file changed, 129 insertions(+), 25 deletions(-) diff --git a/src/platform/test/cinema-main.c b/src/platform/test/cinema-main.c index 60bc2fe79..789cc645e 100644 --- a/src/platform/test/cinema-main.c +++ b/src/platform/test/cinema-main.c @@ -11,6 +11,7 @@ #include #include +#include #include #include @@ -66,7 +67,10 @@ static bool dryRun = false; static int verbosity = 0; bool CInemaTestInit(struct CInemaTest*, const char* directory, const char* filename); -void CInemaTestRun(struct CInemaTest*); +void CInemaTestRun(struct CInemaTest*, struct Table* configTree); + +bool CInemaConfigGetUInt(struct Table* configTree, const char* testName, const char* key, unsigned* value); +void CInemaConfigLoad(struct Table* configTree, const char* testName, struct mCore* core); static void _log(struct mLogger* log, int category, enum mLogLevel level, const char* format, va_list args); @@ -207,6 +211,101 @@ static void reduceTestList(struct CInemaTestList* tests) { } } +static void testToPath(const char* testName, char* path) { + strncpy(path, base, PATH_MAX); + + bool dotSeen = true; + size_t i; + for (i = strlen(path); testName[0] && i < PATH_MAX; ++testName) { + if (testName[0] == '.') { + dotSeen = true; + } else { + if (dotSeen) { + strncpy(&path[i], PATH_SEP, PATH_MAX - i); + i += strlen(PATH_SEP); + dotSeen = false; + if (!i) { + break; + } + } + path[i] = testName[0]; + ++i; + } + } +} + +static void _loadConfigTree(struct Table* configTree, const char* testName) { + char key[MAX_TEST]; + strncpy(key, testName, sizeof(key)); + + struct mCoreConfig* config; + while (!(config = HashTableLookup(configTree, key))) { + char path[PATH_MAX - 1]; + config = malloc(sizeof(*config)); + mCoreConfigInit(config, "cinema"); + testToPath(key, path); + strncat(path, PATH_SEP, sizeof(path) - 1); + strncat(path, "config.ini", sizeof(path) - 1); + mCoreConfigLoadPath(config, path); + HashTableInsert(configTree, key, config); + char* pos = strrchr(key, '.'); + if (!pos) { + break; + } + pos[0] = '\0'; + } +} + +static void _unloadConfigTree(const char* key, void* value, void* user) { + UNUSED(key); + UNUSED(user); + mCoreConfigDeinit(value); +} + +static const char* _lookupValue(struct Table* configTree, const char* testName, const char* key) { + _loadConfigTree(configTree, testName); + + char testKey[MAX_TEST]; + strncpy(testKey, testName, sizeof(testKey)); + + struct mCoreConfig* config; + while (true) { + config = HashTableLookup(configTree, testKey); + if (!config) { + continue; + } + const char* str = ConfigurationGetValue(&config->configTable, "testinfo", key); + if (str) { + return str; + } + char* pos = strrchr(testKey, '.'); + if (!pos) { + break; + } + pos[0] = '\0'; + } + return NULL; +} + +bool CInemaConfigGetUInt(struct Table* configTree, const char* testName, const char* key, unsigned* out) { + const char* charValue = _lookupValue(configTree, testName, key); + if (!charValue) { + return false; + } + char* end; + unsigned long value = strtoul(charValue, &end, 10); + if (*end) { + return false; + } + *out = value; + return true; +} + +void CInemaConfigLoad(struct Table* configTree, const char* testName, struct mCore* core) { + _loadConfigTree(configTree, testName); + // TODO: Write +} + bool CInemaTestInit(struct CInemaTest* test, const char* directory, const char* filename) { if (strncmp(base, directory, strlen(base)) != 0) { return false; @@ -223,7 +322,7 @@ bool CInemaTestInit(struct CInemaTest* test, const char* directory, const char* return true; } -void CInemaTestRun(struct CInemaTest* test) { +void CInemaTestRun(struct CInemaTest* test, struct Table* configTree) { struct VDir* dir = VDirOpen(test->directory); if (!dir) { CIerr(0, "Failed to open test directory\n"); @@ -261,14 +360,25 @@ void CInemaTestRun(struct CInemaTest* test) { core->setVideoBuffer(core, buffer, width); mCoreConfigInit(&core->config, "cinema"); + unsigned limit = 9999; + unsigned skip = 0; + unsigned fail = 0; + + CInemaConfigGetUInt(configTree, test->name, "frames", &limit); + CInemaConfigGetUInt(configTree, test->name, "skip", &skip); + CInemaConfigGetUInt(configTree, test->name, "fail", &fail); + CInemaConfigLoad(configTree, test->name, core); + core->loadROM(core, rom); core->reset(core); test->status = CI_PASS; unsigned minFrame = core->frameCounter(core); - unsigned limit = 9999; size_t frame; + for (frame = 0; frame < skip; ++frame) { + core->runFrame(core); + } for (frame = 0; limit; ++frame, --limit) { char baselineName[32]; snprintf(baselineName, sizeof(baselineName), "baseline_%04" PRIz "u.png", frame); @@ -345,7 +455,16 @@ void CInemaTestRun(struct CInemaTest* test) { } } + if (fail) { + if (test->status == CI_FAIL) { + test->status = CI_XFAIL; + } else if (test->status == CI_PASS) { + test->status = CI_XPASS; + } + } + free(buffer); + mCoreConfigDeinit(&core->config); core->deinit(core); dir->close(dir); } @@ -395,27 +514,7 @@ int main(int argc, char** argv) { size_t i; for (i = 0; i < (size_t) argc; ++i) { char path[PATH_MAX + 1] = {0}; - char* arg = argv[i]; - strncpy(path, base, sizeof(path)); - - bool dotSeen = true; - size_t j; - for (arg = argv[i], j = strlen(path); arg[0] && j < sizeof(path); ++arg) { - if (arg[0] == '.') { - dotSeen = true; - } else { - if (dotSeen) { - strncpy(&path[j], PATH_SEP, sizeof(path) - j); - j += strlen(PATH_SEP); - dotSeen = false; - if (!j) { - break; - } - } - path[j] = arg[0]; - ++j; - } - } + testToPath(argv[i], path); if (!collectTests(&tests, path)) { status = 1; @@ -433,6 +532,9 @@ int main(int argc, char** argv) { reduceTestList(&tests); } + struct Table configTree; + HashTableInit(&configTree, 0, free); + size_t i; for (i = 0; i < CInemaTestListSize(&tests); ++i) { struct CInemaTest* test = CInemaTestListGetPointer(&tests, i); @@ -440,7 +542,7 @@ int main(int argc, char** argv) { CIlog(-1, "%s\n", test->name); } else { CIerr(1, "%s: ", test->name); - CInemaTestRun(test); + CInemaTestRun(test, &configTree); switch (test->status) { case CI_PASS: CIerr(1, "pass"); @@ -467,6 +569,8 @@ int main(int argc, char** argv) { } } + HashTableEnumerate(&configTree, _unloadConfigTree, NULL); + HashTableDeinit(&configTree); CInemaTestListDeinit(&tests); cleanup: From 469f2d99409718196858759c8691771055c5f725 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Thu, 25 Jun 2020 02:12:27 -0700 Subject: [PATCH 13/21] Test: Actually add CInema core config loading --- src/platform/test/cinema-main.c | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/src/platform/test/cinema-main.c b/src/platform/test/cinema-main.c index 789cc645e..ca3980923 100644 --- a/src/platform/test/cinema-main.c +++ b/src/platform/test/cinema-main.c @@ -303,7 +303,36 @@ bool CInemaConfigGetUInt(struct Table* configTree, const char* testName, const c void CInemaConfigLoad(struct Table* configTree, const char* testName, struct mCore* core) { _loadConfigTree(configTree, testName); - // TODO: Write + + char testKey[MAX_TEST] = {0}; + char* keyEnd = testKey; + const char* pos; + while (true) { + pos = strchr(testName, '.'); + size_t maxlen = sizeof(testKey) - (keyEnd - testKey) - 1; + size_t len; + if (pos) { + len = pos - testName; + } else { + len = strlen(testName); + } + if (len > maxlen) { + len = maxlen; + } + strncpy(keyEnd, testName, len); + keyEnd += len; + + struct mCoreConfig* config = HashTableLookup(configTree, testKey); + if (config) { + core->loadConfig(core, config); + } + if (!pos) { + break; + } + testName = pos + 1; + keyEnd[0] = '.'; + ++keyEnd; + } } bool CInemaTestInit(struct CInemaTest* test, const char* directory, const char* filename) { From 52392928a181e15b60d88281c75c48997a69b23a Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Thu, 25 Jun 2020 03:40:40 -0700 Subject: [PATCH 14/21] Test: CInema stats, test skipping, warning fixes --- src/platform/test/cinema-main.c | 118 +++++++++++++++++++++----------- 1 file changed, 78 insertions(+), 40 deletions(-) diff --git a/src/platform/test/cinema-main.c b/src/platform/test/cinema-main.c index ca3980923..0dbc13ba0 100644 --- a/src/platform/test/cinema-main.c +++ b/src/platform/test/cinema-main.c @@ -51,7 +51,11 @@ struct CInemaTest { char filename[MAX_TEST]; char name[MAX_TEST]; enum CInemaStatus status; - int failedFrames; + unsigned failedFrames; + uint64_t failedPixels; + unsigned totalFrames; + uint64_t totalDistance; + uint64_t totalPixels; }; DECLARE_VECTOR(CInemaTestList, struct CInemaTest) @@ -164,23 +168,23 @@ static bool collectTests(struct CInemaTestList* tests, const char* path) { return false; } } else if (entry->type(entry) == VFS_FILE && strncmp(entry->name(entry), "test.", 5) == 0) { - CIerr(2, "Found potential test %s\n", subpath); + CIerr(3, "Found potential test %s\n", subpath); struct VFile* vf = dir->openFile(dir, entry->name(entry), O_RDONLY); if (vf) { if (mCoreIsCompatible(vf) != PLATFORM_NONE || mVideoLogIsCompatible(vf) != PLATFORM_NONE) { struct CInemaTest* test = CInemaTestListAppend(tests); if (!CInemaTestInit(test, path, entry->name(entry))) { - CIerr(2, "Failed to create test\n"); + CIerr(3, "Failed to create test\n"); CInemaTestListResize(tests, -1); } else { - CIerr(1, "Found test %s\n", test->name); + CIerr(2, "Found test %s\n", test->name); } } else { - CIerr(2, "Not a compatible file\n"); + CIerr(3, "Not a compatible file\n"); } vf->close(vf); } else { - CIerr(2, "Failed to open file\n"); + CIerr(3, "Failed to open file\n"); } } entry = dir->listNext(dir); @@ -236,11 +240,11 @@ static void testToPath(const char* testName, char* path) { static void _loadConfigTree(struct Table* configTree, const char* testName) { char key[MAX_TEST]; - strncpy(key, testName, sizeof(key)); + strncpy(key, testName, sizeof(key) - 1); struct mCoreConfig* config; while (!(config = HashTableLookup(configTree, key))) { - char path[PATH_MAX - 1]; + char path[PATH_MAX]; config = malloc(sizeof(*config)); mCoreConfigInit(config, "cinema"); testToPath(key, path); @@ -266,7 +270,7 @@ static const char* _lookupValue(struct Table* configTree, const char* testName, _loadConfigTree(configTree, testName); char testKey[MAX_TEST]; - strncpy(testKey, testName, sizeof(testKey)); + strncpy(testKey, testName, sizeof(testKey) - 1); struct mCoreConfig* config; while (true) { @@ -339,10 +343,11 @@ bool CInemaTestInit(struct CInemaTest* test, const char* directory, const char* if (strncmp(base, directory, strlen(base)) != 0) { return false; } - strncpy(test->directory, directory, sizeof(test->directory)); - strncpy(test->filename, filename, sizeof(test->filename)); + memset(test, 0, sizeof(*test)); + strncpy(test->directory, directory, sizeof(test->directory) - 1); + strncpy(test->filename, filename, sizeof(test->filename) - 1); directory += strlen(base) + 1; - strncpy(test->name, directory, sizeof(test->name)); + strncpy(test->name, directory, sizeof(test->name) - 1); char* str = strstr(test->name, PATH_SEP); while (str) { str[0] = '.'; @@ -352,6 +357,13 @@ bool CInemaTestInit(struct CInemaTest* test, const char* directory, const char* } void CInemaTestRun(struct CInemaTest* test, struct Table* configTree) { + unsigned ignore = 0; + CInemaConfigGetUInt(configTree, test->name, "ignore", &ignore); + if (ignore) { + test->status = CI_SKIP; + return; + } + struct VDir* dir = VDirOpen(test->directory); if (!dir) { CIerr(0, "Failed to open test directory\n"); @@ -412,11 +424,12 @@ void CInemaTestRun(struct CInemaTest* test, struct Table* configTree) { char baselineName[32]; snprintf(baselineName, sizeof(baselineName), "baseline_%04" PRIz "u.png", frame); core->runFrame(core); + ++test->totalFrames; unsigned frameCounter = core->frameCounter(core); if (frameCounter <= minFrame) { break; } - CIerr(2, "Test frame: %u\n", frameCounter); + CIerr(3, "Test frame: %u\n", frameCounter); struct VFile* baselineVF = dir->openFile(dir, baselineName, O_RDONLY); if (!baselineVF) { @@ -443,38 +456,57 @@ void CInemaTestRun(struct CInemaTest* test, struct Table* configTree) { if (!pixels) { CIerr(1, "Failed to allocate baseline buffer\n"); test->status = CI_ERROR; + } else if (!PNGReadPixels(png, info, pixels, pwidth, pheight, pwidth) || !PNGReadFooter(png, end)) { + CIerr(1, "Failed to read %s\n", baselineName); + test->status = CI_ERROR; } else { - if (!PNGReadPixels(png, info, pixels, pwidth, pheight, pwidth) || !PNGReadFooter(png, end)) { - CIerr(1, "Failed to read %s\n", baselineName); - test->status = CI_ERROR; - } else { - uint8_t* testPixels = buffer; - size_t x; - size_t y; - for (y = 0; y < theight; ++y) { - for (x = 0; x < twidth; ++x) { - size_t pix = pwidth * y + x; - size_t tpix = width * y + x; - int testR = testPixels[tpix * 4 + 0]; - int testG = testPixels[tpix * 4 + 1]; - int testB = testPixels[tpix * 4 + 2]; - int expectR = pixels[pix * 4 + 0]; - int expectG = pixels[pix * 4 + 1]; - int expectB = pixels[pix * 4 + 2]; - int r = expectR - testR; - int g = expectG - testG; - int b = expectB - testB; - if (r | g | b) { - CIerr(2, "Frame %u failed at pixel %" PRIz "ux%" PRIz "u with diff %i,%i,%i (expected %02x%02x%02x, got %02x%02x%02x)\n", - frameCounter, x, y, r, g, b, - expectR, expectG, expectB, - testR, testG, testB); - test->status = CI_FAIL; - ++test->failedFrames; + uint8_t* testPixels = buffer; + size_t x; + size_t y; + bool failed = false; + for (y = 0; y < theight; ++y) { + for (x = 0; x < twidth; ++x) { + size_t pix = pwidth * y + x; + size_t tpix = width * y + x; + int testR = testPixels[tpix * 4 + 0]; + int testG = testPixels[tpix * 4 + 1]; + int testB = testPixels[tpix * 4 + 2]; + int expectR = pixels[pix * 4 + 0]; + int expectG = pixels[pix * 4 + 1]; + int expectB = pixels[pix * 4 + 2]; + int r = expectR - testR; + int g = expectG - testG; + int b = expectB - testB; + if (r | g | b) { + failed = true; + CIerr(3, "Frame %u failed at pixel %" PRIz "ux%" PRIz "u with diff %i,%i,%i (expected %02x%02x%02x, got %02x%02x%02x)\n", + frameCounter, x, y, r, g, b, + expectR, expectG, expectB, + testR, testG, testB); + test->status = CI_FAIL; + if (r < 0) { + test->totalDistance -= r; + } else { + test->totalDistance += r; } + if (g < 0) { + test->totalDistance -= g; + } else { + test->totalDistance += g; + } + if (b < 0) { + test->totalDistance -= b; + } else { + test->totalDistance += b; + } + ++test->failedPixels; } } } + if (failed) { + ++test->failedFrames; + } + test->totalPixels += theight * twidth; } PNGReadClose(png, info, end); free(pixels); @@ -594,6 +626,12 @@ int main(int argc, char** argv) { CIerr(1, "error"); break; } + if (test->failedFrames) { + CIerr(2, "\n\tfailed frames: %u/%u (%1.3g%%)", test->failedFrames, test->totalFrames, test->failedFrames / (test->totalFrames * 0.01)); + CIerr(2, "\n\tfailed pixels: %" PRIu64 "/%" PRIu64 " (%1.3g%%)", test->failedPixels, test->totalPixels, test->failedPixels / (test->totalPixels * 0.01)); + CIerr(2, "\n\tdistance: %" PRIu64 "/%" PRIu64 " (%1.3g%%)", test->totalDistance, test->totalPixels * 765, test->totalDistance / (test->totalPixels * 7.65)); + } + CIerr(1, "\n"); } } From f73869ee4be7da9168d55cae57bc6e21e6c0cedb Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Thu, 25 Jun 2020 18:24:40 -0700 Subject: [PATCH 15/21] Test: Refactor out PNG loading --- src/platform/test/cinema-main.c | 178 ++++++++++++++++++-------------- 1 file changed, 98 insertions(+), 80 deletions(-) diff --git a/src/platform/test/cinema-main.c b/src/platform/test/cinema-main.c index 0dbc13ba0..0256f0830 100644 --- a/src/platform/test/cinema-main.c +++ b/src/platform/test/cinema-main.c @@ -356,6 +356,57 @@ bool CInemaTestInit(struct CInemaTest* test, const char* directory, const char* return true; } +static void* _loadBaseline(struct VDir* dir, const struct mCore* core, size_t frame, enum CInemaStatus* status) { + char baselineName[32]; + snprintf(baselineName, sizeof(baselineName), "baseline_%04" PRIz "u.png", frame); + struct VFile* baselineVF = dir->openFile(dir, baselineName, O_RDONLY); + if (!baselineVF) { + *status = CI_FAIL; + return NULL; + } + + png_structp png = PNGReadOpen(baselineVF, 0); + png_infop info = png_create_info_struct(png); + png_infop end = png_create_info_struct(png); + if (!png || !info || !end || !PNGReadHeader(png, info)) { + PNGReadClose(png, info, end); + baselineVF->close(baselineVF); + CIerr(1, "Failed to load %s\n", baselineName); + *status = CI_ERROR; + return NULL; + } + + unsigned pwidth = png_get_image_width(png, info); + unsigned pheight = png_get_image_height(png, info); + unsigned width, height; + core->desiredVideoDimensions(core, &width, &height); + if (pheight != height || pwidth != width) { + PNGReadClose(png, info, end); + baselineVF->close(baselineVF); + CIerr(1, "Size mismatch for %s, expected %ux%u, got %ux%u\n", baselineName, pwidth, pheight, width, height); + *status = CI_FAIL; + return NULL; + } + + uint8_t* pixels = malloc(pwidth * pheight * BYTES_PER_PIXEL); + if (!pixels) { + CIerr(1, "Failed to allocate baseline buffer\n"); + *status = CI_ERROR; + PNGReadClose(png, info, end); + baselineVF->close(baselineVF); + return NULL; + } + if (!PNGReadPixels(png, info, pixels, pwidth, pheight, pwidth) || !PNGReadFooter(png, end)) { + CIerr(1, "Failed to read %s\n", baselineName); + *status = CI_ERROR; + free(pixels); + pixels = NULL; + } + PNGReadClose(png, info, end); + baselineVF->close(baselineVF); + return pixels; +} + void CInemaTestRun(struct CInemaTest* test, struct Table* configTree) { unsigned ignore = 0; CInemaConfigGetUInt(configTree, test->name, "ignore", &ignore); @@ -421,8 +472,6 @@ void CInemaTestRun(struct CInemaTest* test, struct Table* configTree) { core->runFrame(core); } for (frame = 0; limit; ++frame, --limit) { - char baselineName[32]; - snprintf(baselineName, sizeof(baselineName), "baseline_%04" PRIz "u.png", frame); core->runFrame(core); ++test->totalFrames; unsigned frameCounter = core->frameCounter(core); @@ -430,89 +479,58 @@ void CInemaTestRun(struct CInemaTest* test, struct Table* configTree) { break; } CIerr(3, "Test frame: %u\n", frameCounter); - - struct VFile* baselineVF = dir->openFile(dir, baselineName, O_RDONLY); - if (!baselineVF) { - test->status = CI_FAIL; - } else { - png_structp png = PNGReadOpen(baselineVF, 0); - png_infop info = png_create_info_struct(png); - png_infop end = png_create_info_struct(png); - if (!png || !info || !end || !PNGReadHeader(png, info)) { - PNGReadClose(png, info, end); - CIerr(1, "Failed to load %s\n", baselineName); - test->status = CI_ERROR; - } else { - unsigned pwidth = png_get_image_width(png, info); - unsigned pheight = png_get_image_height(png, info); - unsigned twidth, theight; - core->desiredVideoDimensions(core, &twidth, &theight); - if (pheight != theight || pwidth != twidth) { - PNGReadClose(png, info, end); - CIerr(1, "Size mismatch for %s, expected %ux%u, got %ux%u\n", baselineName, pwidth, pheight, twidth, theight); - test->status = CI_FAIL; - } else { - uint8_t* pixels = malloc(pwidth * pheight * BYTES_PER_PIXEL); - if (!pixels) { - CIerr(1, "Failed to allocate baseline buffer\n"); - test->status = CI_ERROR; - } else if (!PNGReadPixels(png, info, pixels, pwidth, pheight, pwidth) || !PNGReadFooter(png, end)) { - CIerr(1, "Failed to read %s\n", baselineName); - test->status = CI_ERROR; - } else { - uint8_t* testPixels = buffer; - size_t x; - size_t y; - bool failed = false; - for (y = 0; y < theight; ++y) { - for (x = 0; x < twidth; ++x) { - size_t pix = pwidth * y + x; - size_t tpix = width * y + x; - int testR = testPixels[tpix * 4 + 0]; - int testG = testPixels[tpix * 4 + 1]; - int testB = testPixels[tpix * 4 + 2]; - int expectR = pixels[pix * 4 + 0]; - int expectG = pixels[pix * 4 + 1]; - int expectB = pixels[pix * 4 + 2]; - int r = expectR - testR; - int g = expectG - testG; - int b = expectB - testB; - if (r | g | b) { - failed = true; - CIerr(3, "Frame %u failed at pixel %" PRIz "ux%" PRIz "u with diff %i,%i,%i (expected %02x%02x%02x, got %02x%02x%02x)\n", - frameCounter, x, y, r, g, b, - expectR, expectG, expectB, - testR, testG, testB); - test->status = CI_FAIL; - if (r < 0) { - test->totalDistance -= r; - } else { - test->totalDistance += r; - } - if (g < 0) { - test->totalDistance -= g; - } else { - test->totalDistance += g; - } - if (b < 0) { - test->totalDistance -= b; - } else { - test->totalDistance += b; - } - ++test->failedPixels; - } - } + uint8_t* pixels = _loadBaseline(dir, core, frame, &test->status); + if (pixels) { + unsigned twidth, theight; + core->desiredVideoDimensions(core, &twidth, &theight); + uint8_t* testPixels = buffer; + size_t x; + size_t y; + bool failed = false; + for (y = 0; y < theight; ++y) { + for (x = 0; x < twidth; ++x) { + size_t pix = twidth * y + x; + size_t tpix = width * y + x; + int testR = testPixels[tpix * 4 + 0]; + int testG = testPixels[tpix * 4 + 1]; + int testB = testPixels[tpix * 4 + 2]; + int expectR = pixels[pix * 4 + 0]; + int expectG = pixels[pix * 4 + 1]; + int expectB = pixels[pix * 4 + 2]; + int r = expectR - testR; + int g = expectG - testG; + int b = expectB - testB; + if (r | g | b) { + failed = true; + CIerr(3, "Frame %u failed at pixel %" PRIz "ux%" PRIz "u with diff %i,%i,%i (expected %02x%02x%02x, got %02x%02x%02x)\n", + frameCounter, x, y, r, g, b, + expectR, expectG, expectB, + testR, testG, testB); + test->status = CI_FAIL; + if (r < 0) { + test->totalDistance -= r; + } else { + test->totalDistance += r; } - if (failed) { - ++test->failedFrames; + if (g < 0) { + test->totalDistance -= g; + } else { + test->totalDistance += g; } - test->totalPixels += theight * twidth; + if (b < 0) { + test->totalDistance -= b; + } else { + test->totalDistance += b; + } + ++test->failedPixels; } - PNGReadClose(png, info, end); - free(pixels); } } - baselineVF->close(baselineVF); + if (failed) { + ++test->failedFrames; + } + test->totalPixels += theight * twidth; + free(pixels); } } From c34614ee4db4d9859e2e498b0b6325d6f8881362 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Sat, 27 Jun 2020 23:49:59 -0700 Subject: [PATCH 16/21] Test: Add CInema diff writes --- src/platform/test/cinema-main.c | 221 +++++++++++++++++++++++++------- 1 file changed, 173 insertions(+), 48 deletions(-) diff --git a/src/platform/test/cinema-main.c b/src/platform/test/cinema-main.c index 0256f0830..cc79ff6b4 100644 --- a/src/platform/test/cinema-main.c +++ b/src/platform/test/cinema-main.c @@ -22,20 +22,24 @@ #endif #include +#include +#include #define MAX_TEST 200 static const struct option longOpts[] = { { "base", required_argument, 0, 'b' }, + { "diffs", no_argument, 0, 'd' }, { "help", no_argument, 0, 'h' }, { "quiet", no_argument, 0, 'q' }, { "dry-run", no_argument, 0, 'n' }, + { "outdir", required_argument, 0, 'o' }, { "verbose", no_argument, 0, 'v' }, { "version", no_argument, 0, '\0' }, { 0, 0, 0, 0 } }; -static const char shortOpts[] = "b:hnqv"; +static const char shortOpts[] = "b:dhno:qv"; enum CInemaStatus { CI_PASS, @@ -58,6 +62,13 @@ struct CInemaTest { uint64_t totalPixels; }; +struct CInemaImage { + void* data; + unsigned width; + unsigned height; + unsigned stride; +}; + DECLARE_VECTOR(CInemaTestList, struct CInemaTest) DEFINE_VECTOR(CInemaTestList, struct CInemaTest) @@ -67,7 +78,9 @@ DEFINE_VECTOR(ImageList, void*) static bool showVersion = false; static bool showUsage = false; static char base[PATH_MAX] = {0}; +static char outdir[PATH_MAX] = {'.'}; static bool dryRun = false; +static bool diffs = false; static int verbosity = 0; bool CInemaTestInit(struct CInemaTest*, const char* directory, const char* filename); @@ -115,12 +128,19 @@ static bool parseCInemaArgs(int argc, char* const* argv) { strncpy(base, optarg, sizeof(base)); // TODO: Verify path exists break; + case 'd': + diffs = true; + break; case 'h': showUsage = true; break; case 'n': dryRun = true; break; + case 'o': + strncpy(outdir, optarg, sizeof(outdir)); + // TODO: Make directory + break; case 'q': --verbosity; break; @@ -136,10 +156,12 @@ static bool parseCInemaArgs(int argc, char* const* argv) { } static void usageCInema(const char* arg0) { - printf("usage: %s [-h] [-b BASE] [--version] [test...]\n", arg0); - puts(" -b, --base Path to the CInema base directory"); + printf("usage: %s [-dhnqv] [-b BASE] [-o DIR] [--version] [test...]\n", arg0); + puts(" -b, --base [BASE] Path to the CInema base directory"); + puts(" -d, --diffs Output image diffs from failures"); puts(" -h, --help Print this usage and exit"); puts(" -n, --dry-run List all collected tests instead of running them"); + puts(" -o, --output [DIR] Path to output applicable results"); puts(" -q, --quiet Decrease log verbosity (can be repeated)"); puts(" -v, --verbose Increase log verbosity (can be repeated)"); puts(" --version Print version and exit"); @@ -356,13 +378,13 @@ bool CInemaTestInit(struct CInemaTest* test, const char* directory, const char* return true; } -static void* _loadBaseline(struct VDir* dir, const struct mCore* core, size_t frame, enum CInemaStatus* status) { +static bool _loadBaseline(struct VDir* dir, struct CInemaImage* image, size_t frame, enum CInemaStatus* status) { char baselineName[32]; snprintf(baselineName, sizeof(baselineName), "baseline_%04" PRIz "u.png", frame); struct VFile* baselineVF = dir->openFile(dir, baselineName, O_RDONLY); if (!baselineVF) { *status = CI_FAIL; - return NULL; + return false; } png_structp png = PNGReadOpen(baselineVF, 0); @@ -373,38 +395,94 @@ static void* _loadBaseline(struct VDir* dir, const struct mCore* core, size_t fr baselineVF->close(baselineVF); CIerr(1, "Failed to load %s\n", baselineName); *status = CI_ERROR; - return NULL; + return false; } unsigned pwidth = png_get_image_width(png, info); unsigned pheight = png_get_image_height(png, info); - unsigned width, height; - core->desiredVideoDimensions(core, &width, &height); - if (pheight != height || pwidth != width) { + if (pheight != image->height || pwidth != image->width) { PNGReadClose(png, info, end); baselineVF->close(baselineVF); - CIerr(1, "Size mismatch for %s, expected %ux%u, got %ux%u\n", baselineName, pwidth, pheight, width, height); + CIerr(1, "Size mismatch for %s, expected %ux%u, got %ux%u\n", baselineName, pwidth, pheight, image->width, image->height); *status = CI_FAIL; - return NULL; + return false; } - uint8_t* pixels = malloc(pwidth * pheight * BYTES_PER_PIXEL); - if (!pixels) { + image->data = malloc(pwidth * pheight * BYTES_PER_PIXEL); + if (!image->data) { CIerr(1, "Failed to allocate baseline buffer\n"); *status = CI_ERROR; PNGReadClose(png, info, end); baselineVF->close(baselineVF); - return NULL; + return false; } - if (!PNGReadPixels(png, info, pixels, pwidth, pheight, pwidth) || !PNGReadFooter(png, end)) { + if (!PNGReadPixels(png, info, image->data, pwidth, pheight, pwidth) || !PNGReadFooter(png, end)) { CIerr(1, "Failed to read %s\n", baselineName); *status = CI_ERROR; - free(pixels); - pixels = NULL; + free(image->data); + return false; } PNGReadClose(png, info, end); baselineVF->close(baselineVF); - return pixels; + image->stride = pwidth; + return true; +} + +static struct VDir* _makeOutDir(const char* testName) { + char path[PATH_MAX] = {0}; + strncpy(path, outdir, sizeof(path) - 1); + char* pathEnd = path + strlen(path); + const char* pos; + while (true) { + pathEnd[0] = PATH_SEP[0]; + ++pathEnd; + pos = strchr(testName, '.'); + size_t maxlen = sizeof(path) - (pathEnd - path) - 1; + size_t len; + if (pos) { + len = pos - testName; + } else { + len = strlen(testName); + } + if (len > maxlen) { + len = maxlen; + } + strncpy(pathEnd, testName, len); + pathEnd += len; + + mkdir(path, 0777); + + if (!pos) { + break; + } + testName = pos + 1; + } + return VDirOpen(path); +} + +static void _writeDiff(const char* testName, struct CInemaImage* image, size_t frame, const char* type) { + struct VDir* dir = _makeOutDir(testName); + if (!dir) { + CIerr(0, "Could not open directory for %s\n", testName); + return; + } + char name[32]; + snprintf(name, sizeof(name), "%s_%04" PRIz "u.png", type, frame); + struct VFile* vf = dir->openFile(dir, name, O_CREAT | O_TRUNC | O_WRONLY); + if (!vf) { + CIerr(0, "Could not open output file %s\n", name); + return; + } + + png_structp png = PNGWriteOpen(vf); + png_infop info = PNGWriteHeader(png, image->width, image->height); + if (!PNGWritePixels(png, image->width, image->height, image->stride, image->data)) { + CIerr(0, "Could not write output image %s\n", name); + } + PNGWriteClose(png, info); + + vf->close(vf); + return; } void CInemaTestRun(struct CInemaTest* test, struct Table* configTree) { @@ -440,16 +518,17 @@ void CInemaTestRun(struct CInemaTest* test, struct Table* configTree) { core->deinit(core); return; } - unsigned width, height; - core->desiredVideoDimensions(core, &width, &height); - ssize_t bufferSize = width * height * BYTES_PER_PIXEL; - void* buffer = malloc(bufferSize); - if (!buffer) { + struct CInemaImage image; + core->desiredVideoDimensions(core, &image.width, &image.height); + ssize_t bufferSize = image.width * image.height * BYTES_PER_PIXEL; + image.data = malloc(bufferSize); + image.stride = image.width; + if (!image.data) { CIerr(0, "Failed to allocate video buffer\n"); test->status = CI_ERROR; core->deinit(core); } - core->setVideoBuffer(core, buffer, width); + core->setVideoBuffer(core, image.data, image.stride); mCoreConfigInit(&core->config, "cinema"); unsigned limit = 9999; @@ -479,49 +558,70 @@ void CInemaTestRun(struct CInemaTest* test, struct Table* configTree) { break; } CIerr(3, "Test frame: %u\n", frameCounter); - uint8_t* pixels = _loadBaseline(dir, core, frame, &test->status); - if (pixels) { - unsigned twidth, theight; - core->desiredVideoDimensions(core, &twidth, &theight); - uint8_t* testPixels = buffer; + core->desiredVideoDimensions(core, &image.width, &image.height); + uint8_t* diff = NULL; + struct CInemaImage expected = { + .data = NULL, + .width = image.width, + .height = image.height, + .stride = image.width, + }; + if (_loadBaseline(dir, &expected, frame, &test->status)) { + uint8_t* testPixels = image.data; + uint8_t* expectPixels = expected.data; size_t x; size_t y; + int max = 0; bool failed = false; - for (y = 0; y < theight; ++y) { - for (x = 0; x < twidth; ++x) { - size_t pix = twidth * y + x; - size_t tpix = width * y + x; + for (y = 0; y < image.height; ++y) { + for (x = 0; x < image.width; ++x) { + size_t pix = expected.stride * y + x; + size_t tpix = image.stride * y + x; int testR = testPixels[tpix * 4 + 0]; int testG = testPixels[tpix * 4 + 1]; int testB = testPixels[tpix * 4 + 2]; - int expectR = pixels[pix * 4 + 0]; - int expectG = pixels[pix * 4 + 1]; - int expectB = pixels[pix * 4 + 2]; + int expectR = expectPixels[pix * 4 + 0]; + int expectG = expectPixels[pix * 4 + 1]; + int expectB = expectPixels[pix * 4 + 2]; int r = expectR - testR; int g = expectG - testG; int b = expectB - testB; if (r | g | b) { failed = true; + if (diffs && !diff) { + diff = calloc(expected.width * expected.height, BYTES_PER_PIXEL); + } CIerr(3, "Frame %u failed at pixel %" PRIz "ux%" PRIz "u with diff %i,%i,%i (expected %02x%02x%02x, got %02x%02x%02x)\n", frameCounter, x, y, r, g, b, expectR, expectG, expectB, testR, testG, testB); test->status = CI_FAIL; if (r < 0) { - test->totalDistance -= r; - } else { - test->totalDistance += r; + r = -r; } if (g < 0) { - test->totalDistance -= g; - } else { - test->totalDistance += g; + g = -g; } if (b < 0) { - test->totalDistance -= b; - } else { - test->totalDistance += b; + b = -b; } + + if (diff) { + if (r > max) { + max = r; + } + if (g > max) { + max = g; + } + if (b > max) { + max = b; + } + diff[pix * 4 + 0] = r; + diff[pix * 4 + 1] = g; + diff[pix * 4 + 2] = b; + } + + test->totalDistance += r + g + b; ++test->failedPixels; } } @@ -529,8 +629,33 @@ void CInemaTestRun(struct CInemaTest* test, struct Table* configTree) { if (failed) { ++test->failedFrames; } - test->totalPixels += theight * twidth; - free(pixels); + test->totalPixels += image.height * image.width; + if (diff) { + if (failed) { + struct CInemaImage outdiff = { + .data = diff, + .width = image.width, + .height = image.height, + .stride = image.width, + }; + + _writeDiff(test->name, &image, frame, "result"); + _writeDiff(test->name, &expected, frame, "expected"); + _writeDiff(test->name, &outdiff, frame, "diff"); + + for (y = 0; y < outdiff.height; ++y) { + for (x = 0; x < outdiff.width; ++x) { + size_t pix = outdiff.stride * y + x; + diff[pix * 4 + 0] = diff[pix * 4 + 0] * 255 / max; + diff[pix * 4 + 1] = diff[pix * 4 + 1] * 255 / max; + diff[pix * 4 + 2] = diff[pix * 4 + 2] * 255 / max; + } + } + _writeDiff(test->name, &outdiff, frame, "normalized"); + } + free(diff); + } + free(expected.data); } } @@ -542,7 +667,7 @@ void CInemaTestRun(struct CInemaTest* test, struct Table* configTree) { } } - free(buffer); + free(image.data); mCoreConfigDeinit(&core->config); core->deinit(core); dir->close(dir); From f9b572e50b5a2ec826a68b985980f55d6ffb3d54 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Sun, 28 Jun 2020 00:40:54 -0700 Subject: [PATCH 17/21] Test: Add back rebaselining --- src/platform/test/cinema-main.c | 72 ++++++++++++++++++++++++--------- 1 file changed, 52 insertions(+), 20 deletions(-) diff --git a/src/platform/test/cinema-main.c b/src/platform/test/cinema-main.c index cc79ff6b4..74d15b62c 100644 --- a/src/platform/test/cinema-main.c +++ b/src/platform/test/cinema-main.c @@ -28,18 +28,19 @@ #define MAX_TEST 200 static const struct option longOpts[] = { - { "base", required_argument, 0, 'b' }, - { "diffs", no_argument, 0, 'd' }, - { "help", no_argument, 0, 'h' }, - { "quiet", no_argument, 0, 'q' }, - { "dry-run", no_argument, 0, 'n' }, - { "outdir", required_argument, 0, 'o' }, - { "verbose", no_argument, 0, 'v' }, - { "version", no_argument, 0, '\0' }, + { "base", required_argument, 0, 'b' }, + { "diffs", no_argument, 0, 'd' }, + { "help", no_argument, 0, 'h' }, + { "dry-run", no_argument, 0, 'n' }, + { "outdir", required_argument, 0, 'o' }, + { "quiet", no_argument, 0, 'q' }, + { "rebaseline", no_argument, 0, 'r' }, + { "verbose", no_argument, 0, 'v' }, + { "version", no_argument, 0, '\0' }, { 0, 0, 0, 0 } }; -static const char shortOpts[] = "b:dhno:qv"; +static const char shortOpts[] = "b:dhno:qrv"; enum CInemaStatus { CI_PASS, @@ -81,6 +82,7 @@ static char base[PATH_MAX] = {0}; static char outdir[PATH_MAX] = {'.'}; static bool dryRun = false; static bool diffs = false; +static bool rebaseline = false; static int verbosity = 0; bool CInemaTestInit(struct CInemaTest*, const char* directory, const char* filename); @@ -144,6 +146,9 @@ static bool parseCInemaArgs(int argc, char* const* argv) { case 'q': --verbosity; break; + case 'r': + rebaseline = true; + break; case 'v': ++verbosity; break; @@ -163,6 +168,7 @@ static void usageCInema(const char* arg0) { puts(" -n, --dry-run List all collected tests instead of running them"); puts(" -o, --output [DIR] Path to output applicable results"); puts(" -q, --quiet Decrease log verbosity (can be repeated)"); + puts(" -r, --rebaseline Rewrite the baseline for failing tests"); puts(" -v, --verbose Increase log verbosity (can be repeated)"); puts(" --version Print version and exit"); } @@ -383,7 +389,9 @@ static bool _loadBaseline(struct VDir* dir, struct CInemaImage* image, size_t fr snprintf(baselineName, sizeof(baselineName), "baseline_%04" PRIz "u.png", frame); struct VFile* baselineVF = dir->openFile(dir, baselineName, O_RDONLY); if (!baselineVF) { - *status = CI_FAIL; + if (*status == CI_PASS) { + *status = CI_FAIL; + } return false; } @@ -404,7 +412,9 @@ static bool _loadBaseline(struct VDir* dir, struct CInemaImage* image, size_t fr PNGReadClose(png, info, end); baselineVF->close(baselineVF); CIerr(1, "Size mismatch for %s, expected %ux%u, got %ux%u\n", baselineName, pwidth, pheight, image->width, image->height); - *status = CI_FAIL; + if (*status == CI_PASS) { + *status = CI_FAIL; + } return false; } @@ -460,7 +470,18 @@ static struct VDir* _makeOutDir(const char* testName) { return VDirOpen(path); } -static void _writeDiff(const char* testName, struct CInemaImage* image, size_t frame, const char* type) { +static void _writeImage(struct VFile* vf, const struct CInemaImage* image) { + png_structp png = PNGWriteOpen(vf); + png_infop info = PNGWriteHeader(png, image->width, image->height); + if (!PNGWritePixels(png, image->width, image->height, image->stride, image->data)) { + CIerr(0, "Could not write output image\n"); + } + PNGWriteClose(png, info); + + vf->close(vf); +} + +static void _writeDiff(const char* testName, const struct CInemaImage* image, size_t frame, const char* type) { struct VDir* dir = _makeOutDir(testName); if (!dir) { CIerr(0, "Could not open directory for %s\n", testName); @@ -471,18 +492,22 @@ static void _writeDiff(const char* testName, struct CInemaImage* image, size_t f struct VFile* vf = dir->openFile(dir, name, O_CREAT | O_TRUNC | O_WRONLY); if (!vf) { CIerr(0, "Could not open output file %s\n", name); + dir->close(dir); return; } + _writeImage(vf, image); + dir->close(dir); +} - png_structp png = PNGWriteOpen(vf); - png_infop info = PNGWriteHeader(png, image->width, image->height); - if (!PNGWritePixels(png, image->width, image->height, image->stride, image->data)) { - CIerr(0, "Could not write output image %s\n", name); +static void _writeBaseline(struct VDir* dir, const struct CInemaImage* image, size_t frame) { + char baselineName[32]; + snprintf(baselineName, sizeof(baselineName), "baseline_%04" PRIz "u.png", frame); + struct VFile* baselineVF = dir->openFile(dir, baselineName, O_CREAT | O_TRUNC | O_WRONLY); + if (baselineVF) { + _writeImage(baselineVF, image); + } else { + CIerr(0, "Could not open output file %s\n", baselineName); } - PNGWriteClose(png, info); - - vf->close(vf); - return; } void CInemaTestRun(struct CInemaTest* test, struct Table* configTree) { @@ -630,6 +655,9 @@ void CInemaTestRun(struct CInemaTest* test, struct Table* configTree) { ++test->failedFrames; } test->totalPixels += image.height * image.width; + if (rebaseline && failed) { + _writeBaseline(dir, &image, frame); + } if (diff) { if (failed) { struct CInemaImage outdiff = { @@ -656,6 +684,10 @@ void CInemaTestRun(struct CInemaTest* test, struct Table* configTree) { free(diff); } free(expected.data); + } else if (test->status == CI_ERROR) { + break; + } else if (rebaseline) { + _writeBaseline(dir, &image, frame); } } From 72c904cdedaa79eea800fe05a5cf5ad8e1c7ce96 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Sun, 28 Jun 2020 15:50:42 -0700 Subject: [PATCH 18/21] Test: Allow root CInema config --- src/platform/test/cinema-main.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/platform/test/cinema-main.c b/src/platform/test/cinema-main.c index 74d15b62c..28a97a046 100644 --- a/src/platform/test/cinema-main.c +++ b/src/platform/test/cinema-main.c @@ -281,10 +281,13 @@ static void _loadConfigTree(struct Table* configTree, const char* testName) { mCoreConfigLoadPath(config, path); HashTableInsert(configTree, key, config); char* pos = strrchr(key, '.'); - if (!pos) { + if (pos) { + pos[0] = '\0'; + } else if (key[0]) { + key[0] = '\0'; + } else { break; } - pos[0] = '\0'; } } @@ -311,10 +314,13 @@ static const char* _lookupValue(struct Table* configTree, const char* testName, return str; } char* pos = strrchr(testKey, '.'); - if (!pos) { + if (pos) { + pos[0] = '\0'; + } else if (testKey[0]) { + testKey[0] = '\0'; + } else { break; } - pos[0] = '\0'; } return NULL; } From fe11f095ec9d55521446854f5431135b4e7a03e9 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Mon, 13 Jul 2020 16:55:12 -0700 Subject: [PATCH 19/21] Test: Set deterministic RTC --- src/platform/test/cinema-main.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/platform/test/cinema-main.c b/src/platform/test/cinema-main.c index 28a97a046..67c86902a 100644 --- a/src/platform/test/cinema-main.c +++ b/src/platform/test/cinema-main.c @@ -572,6 +572,8 @@ void CInemaTestRun(struct CInemaTest* test, struct Table* configTree) { CInemaConfigLoad(configTree, test->name, core); core->loadROM(core, rom); + core->rtc.override = RTC_FAKE_EPOCH; + core->rtc.value = 1200000000; core->reset(core); test->status = CI_PASS; From 8b90fa2fe53a925df847017c397fff8dda484d62 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Sat, 11 Jul 2020 22:04:47 -0700 Subject: [PATCH 20/21] Test: Move much of the logging to stdout --- src/platform/test/cinema-main.c | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/src/platform/test/cinema-main.c b/src/platform/test/cinema-main.c index 67c86902a..13fed9ffa 100644 --- a/src/platform/test/cinema-main.c +++ b/src/platform/test/cinema-main.c @@ -417,7 +417,7 @@ static bool _loadBaseline(struct VDir* dir, struct CInemaImage* image, size_t fr if (pheight != image->height || pwidth != image->width) { PNGReadClose(png, info, end); baselineVF->close(baselineVF); - CIerr(1, "Size mismatch for %s, expected %ux%u, got %ux%u\n", baselineName, pwidth, pheight, image->width, image->height); + CIlog(1, "Size mismatch for %s, expected %ux%u, got %ux%u\n", baselineName, pwidth, pheight, image->width, image->height); if (*status == CI_PASS) { *status = CI_FAIL; } @@ -590,7 +590,7 @@ void CInemaTestRun(struct CInemaTest* test, struct Table* configTree) { if (frameCounter <= minFrame) { break; } - CIerr(3, "Test frame: %u\n", frameCounter); + CIlog(3, "Test frame: %u\n", frameCounter); core->desiredVideoDimensions(core, &image.width, &image.height); uint8_t* diff = NULL; struct CInemaImage expected = { @@ -624,7 +624,7 @@ void CInemaTestRun(struct CInemaTest* test, struct Table* configTree) { if (diffs && !diff) { diff = calloc(expected.width * expected.height, BYTES_PER_PIXEL); } - CIerr(3, "Frame %u failed at pixel %" PRIz "ux%" PRIz "u with diff %i,%i,%i (expected %02x%02x%02x, got %02x%02x%02x)\n", + CIlog(3, "Frame %u failed at pixel %" PRIz "ux%" PRIz "u with diff %i,%i,%i (expected %02x%02x%02x, got %02x%02x%02x)\n", frameCounter, x, y, r, g, b, expectR, expectG, expectB, testR, testG, testB); @@ -738,7 +738,7 @@ int main(int argc, char** argv) { argv += optind; if (!base[0] && !determineBase(argc, argv)) { - CIerr(0, "Could not determine CInema test base. Please specify manually."); + CIlog(0, "Could not determine CInema test base. Please specify manually."); status = 1; goto cleanup; } @@ -770,7 +770,7 @@ int main(int argc, char** argv) { } if (CInemaTestListSize(&tests) == 0) { - CIerr(1, "No tests found."); + CIlog(1, "No tests found."); status = 1; } else { reduceTestList(&tests); @@ -785,37 +785,36 @@ int main(int argc, char** argv) { if (dryRun) { CIlog(-1, "%s\n", test->name); } else { - CIerr(1, "%s: ", test->name); + CIlog(1, "%s: ", test->name); + fflush(stdout); CInemaTestRun(test, &configTree); switch (test->status) { case CI_PASS: - CIerr(1, "pass"); + CIlog(1, "pass\n"); break; case CI_FAIL: status = 1; - CIerr(1, "fail"); + CIlog(1, "fail\n"); break; case CI_XPASS: - CIerr(1, "xpass"); + CIlog(1, "xpass\n"); break; case CI_XFAIL: - CIerr(1, "xfail"); + CIlog(1, "xfail\n"); break; case CI_SKIP: - CIerr(1, "skip"); + CIlog(1, "skip\n"); break; case CI_ERROR: status = 1; - CIerr(1, "error"); + CIlog(1, "error"); break; } if (test->failedFrames) { - CIerr(2, "\n\tfailed frames: %u/%u (%1.3g%%)", test->failedFrames, test->totalFrames, test->failedFrames / (test->totalFrames * 0.01)); - CIerr(2, "\n\tfailed pixels: %" PRIu64 "/%" PRIu64 " (%1.3g%%)", test->failedPixels, test->totalPixels, test->failedPixels / (test->totalPixels * 0.01)); - CIerr(2, "\n\tdistance: %" PRIu64 "/%" PRIu64 " (%1.3g%%)", test->totalDistance, test->totalPixels * 765, test->totalDistance / (test->totalPixels * 7.65)); + CIlog(2, "\tfailed frames: %u/%u (%1.3g%%)\n", test->failedFrames, test->totalFrames, test->failedFrames / (test->totalFrames * 0.01)); + CIlog(2, "\tfailed pixels: %" PRIu64 "/%" PRIu64 " (%1.3g%%)\n", test->failedPixels, test->totalPixels, test->failedPixels / (test->totalPixels * 0.01)); + CIlog(2, "\tdistance: %" PRIu64 "/%" PRIu64 " (%1.3g%%)\n", test->totalDistance, test->totalPixels * 765, test->totalDistance / (test->totalPixels * 7.65)); } - - CIerr(1, "\n"); } } From 9a33e5e84f79cb29221bdf71441ebc177b685192 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Thu, 16 Jul 2020 18:27:06 -0700 Subject: [PATCH 21/21] Test: Implement logger in CInema --- src/platform/test/cinema-main.c | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/platform/test/cinema-main.c b/src/platform/test/cinema-main.c index 13fed9ffa..83bdb52b2 100644 --- a/src/platform/test/cinema-main.c +++ b/src/platform/test/cinema-main.c @@ -714,7 +714,30 @@ void CInemaTestRun(struct CInemaTest* test, struct Table* configTree) { } void _log(struct mLogger* log, int category, enum mLogLevel level, const char* format, va_list args) { - // TODO: Write + UNUSED(log); + if (verbosity < 0) { + return; + } + int mask = mLOG_FATAL; + if (verbosity >= 1) { + mask |= mLOG_ERROR; + } + if (verbosity >= 2) { + mask |= mLOG_WARN; + } + if (verbosity >= 4) { + mask |= mLOG_INFO; + } + if (verbosity >= 5) { + mask |= mLOG_ALL; + } + if (!(mask & level)) { + return; + } + + char buffer[256]; + vsnprintf(buffer, sizeof(buffer), format, args); + CIerr(0, "[%s] %s\n", mLogCategoryName(category), buffer); } int main(int argc, char** argv) {