From 3ff241a189607ee7e82c99fd10366ef955957382 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Tue, 10 Nov 2026 14:25:21 +0100 Subject: [PATCH] fix: prove the cascade loads in BAM camera plugins The four camera plugins link OpenCV statically. Refs now cite the CascadeClassifier::load call, its path built from the plugin directory and the three-entry table, and the empty detector that follows a failed load. --- emulators/future-pinball-fploader.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/emulators/future-pinball-fploader.yml b/emulators/future-pinball-fploader.yml index 0e3b0ae1e..33c191bca 100644 --- a/emulators/future-pinball-fploader.yml +++ b/emulators/future-pinball-fploader.yml @@ -874,8 +874,8 @@ files: category: game_data size: 919871 description: "OpenCV Haar cascade for frontal faces" - source_ref: "PS3Eye.dll (sha256 191996d48372d75f) FUN_10002440 0x10002565-0x100025aa (GetCurrentDirectoryA, backslash), 0x100025af-0x100025ca (the index at 0x1018e360, clamped to 0..2, picks entry 0 of the path table 0x10175008), 0x1000266d (cv::CascadeClassifier::load, FUN_100e2420, cvLoad fallback at 0x100e25a3), DesktopCam.dll (sha256 4928c27ab0ea5bd0) FUN_10001ee0 0x1000200d (entry 0 of 0x1031aee0), 0x10002096 (load), Simple Cam.dll 0x100024aa, DesktopPS3Eye.dll 0x1000236c (their path tables)" - note: "One cascade is read at a time, the one the plugin index selects, relative to the plugins\\ working directory." + source_ref: "BAM 1.5-408 plugins, PS3Eye.dll (sha256 191996d48372d75f) BAM_load 0x1000208d (FUN_10001c10 caches GetCurrentDirectoryA plus a backslash at 0x10228d48 while plugins::Load holds plugins\\ as the working directory), FUN_10002440 0x10002581-0x100025e3 (that directory, then entry 0 of the table 0x10175008, index 0x1018e360 clamped to 0..2), 0x1000266d (load FUN_100e2420: FileStorage 0x100e2529, open 0x10057fa3 reaching cvOpenFileStorage FUN_10067eb0, isOpened 0x100e2558, cvLoad FUN_100679d0 at 0x100e25a3), detectMultiScale empty test 0x100e01d0-0x100e01db, DesktopCam.dll (sha256 4928c27ab0ea5bd0) BAM_load 0x10001856 (FUN_100011d0, buffer 0x103b3330), FUN_10001ee0 0x10001fc0-0x10002022 (entry 0 of 0x1031aee0), 0x10002096 (load FUN_10127870: FileStorage 0x101279c8, isOpened 0x101279f3, cvLoad FUN_100732d0 at 0x10127a62), empty test 0x10127cbb-0x10127cc6, Simple Cam.dll (sha256 3b232df5e99b23c0) BAM_load 0x10002173 (FUN_10001cf0, buffer 0x103a09b8), FUN_10002370 0x1000245e-0x100024c0 (entry 0 of 0x102d9020), 0x1000254a (load FUN_10111db0: FileStorage 0x10111eb9, isOpened 0x10111ee8, cvLoad FUN_1006b1b0 at 0x10111f33), empty test 0x1010fb64-0x1010fb6b, DesktopPS3Eye.dll (sha256 14dbb5b11749622c) BAM_load 0x100018cd (FUN_10001250, buffer 0x1023d748), FUN_100021c0 0x1000231c-0x1000237e (entry 0 of 0x101a6fd8), 0x100023f5 (load FUN_100f97a0: FileStorage 0x100f98f8, isOpened 0x100f9923, cvLoad FUN_10070830 at 0x100f9992), empty test 0x100f9beb-0x100f9bf6" + note: "One cascade is read at a time, the one the plugin index selects (0, 1 or 2), from the plugins\\ directory cached by BAM_load. All four plugins link OpenCV 2.4 statically. cvLoad is the one function holding \"Could not find the/an object in file storage\", and its only caller is the routine the plugin calls with the path, which constructs a FileStorage, returns false when isOpened fails, then falls back to cvLoad: cv::CascadeClassifier::load. The plugin never tests the result. With no cascade, detectMultiScale returns at its empty() test, so no face is reported and the game runs on." - name: haarcascade_frontalface_default.xml sha1: 85a317ce2fc0415741a41736e99bd281d2437568 @@ -886,8 +886,8 @@ files: category: game_data size: 1254733 description: "Second OpenCV Haar cascade for frontal faces" - source_ref: "PS3Eye.dll (sha256 191996d48372d75f) FUN_10002440 0x10002565-0x100025aa (GetCurrentDirectoryA, backslash), 0x100025af-0x100025ca (the index at 0x1018e360, clamped to 0..2, picks entry 1 of the path table 0x10175008), 0x1000266d (cv::CascadeClassifier::load, FUN_100e2420, cvLoad fallback at 0x100e25a3), DesktopCam.dll (sha256 4928c27ab0ea5bd0) FUN_10001ee0 0x1000200d (entry 1 of 0x1031aee0), 0x10002096 (load), Simple Cam.dll 0x100024aa, DesktopPS3Eye.dll 0x1000236c (their path tables)" - note: "One cascade is read at a time, the one the plugin index selects, relative to the plugins\\ working directory." + source_ref: "BAM 1.5-408 plugins, PS3Eye.dll (sha256 191996d48372d75f) BAM_load 0x1000208d (FUN_10001c10 caches GetCurrentDirectoryA plus a backslash at 0x10228d48 while plugins::Load holds plugins\\ as the working directory), FUN_10002440 0x10002581-0x100025e3 (that directory, then entry 1 of the table 0x10175008, index 0x1018e360 clamped to 0..2), 0x1000266d (load FUN_100e2420: FileStorage 0x100e2529, open 0x10057fa3 reaching cvOpenFileStorage FUN_10067eb0, isOpened 0x100e2558, cvLoad FUN_100679d0 at 0x100e25a3), detectMultiScale empty test 0x100e01d0-0x100e01db, DesktopCam.dll (sha256 4928c27ab0ea5bd0) BAM_load 0x10001856 (FUN_100011d0, buffer 0x103b3330), FUN_10001ee0 0x10001fc0-0x10002022 (entry 1 of 0x1031aee0), 0x10002096 (load FUN_10127870: FileStorage 0x101279c8, isOpened 0x101279f3, cvLoad FUN_100732d0 at 0x10127a62), empty test 0x10127cbb-0x10127cc6, Simple Cam.dll (sha256 3b232df5e99b23c0) BAM_load 0x10002173 (FUN_10001cf0, buffer 0x103a09b8), FUN_10002370 0x1000245e-0x100024c0 (entry 1 of 0x102d9020), 0x1000254a (load FUN_10111db0: FileStorage 0x10111eb9, isOpened 0x10111ee8, cvLoad FUN_1006b1b0 at 0x10111f33), empty test 0x1010fb64-0x1010fb6b, DesktopPS3Eye.dll (sha256 14dbb5b11749622c) BAM_load 0x100018cd (FUN_10001250, buffer 0x1023d748), FUN_100021c0 0x1000231c-0x1000237e (entry 1 of 0x101a6fd8), 0x100023f5 (load FUN_100f97a0: FileStorage 0x100f98f8, isOpened 0x100f9923, cvLoad FUN_10070830 at 0x100f9992), empty test 0x100f9beb-0x100f9bf6" + note: "One cascade is read at a time, the one the plugin index selects (0, 1 or 2), from the plugins\\ directory cached by BAM_load. All four plugins link OpenCV 2.4 statically. cvLoad is the one function holding \"Could not find the/an object in file storage\", and its only caller is the routine the plugin calls with the path, which constructs a FileStorage, returns false when isOpened fails, then falls back to cvLoad: cv::CascadeClassifier::load. The plugin never tests the result. With no cascade, detectMultiScale returns at its empty() test, so no face is reported and the game runs on." - name: lbpcascade_frontalface.xml sha1: d668cbe8712f062bcc6af898ebb2937b73dcfd2d @@ -898,8 +898,8 @@ files: category: game_data size: 51856 description: "OpenCV local binary pattern cascade for frontal faces" - source_ref: "PS3Eye.dll (sha256 191996d48372d75f) FUN_10002440 0x10002565-0x100025aa (GetCurrentDirectoryA, backslash), 0x100025af-0x100025ca (the index at 0x1018e360, clamped to 0..2, picks entry 2 of the path table 0x10175008), 0x1000266d (cv::CascadeClassifier::load, FUN_100e2420, cvLoad fallback at 0x100e25a3), DesktopCam.dll (sha256 4928c27ab0ea5bd0) FUN_10001ee0 0x1000200d (entry 2 of 0x1031aee0), 0x10002096 (load), Simple Cam.dll 0x100024aa, DesktopPS3Eye.dll 0x1000236c (their path tables)" - note: "One cascade is read at a time, the one the plugin index selects, relative to the plugins\\ working directory." + source_ref: "BAM 1.5-408 plugins, PS3Eye.dll (sha256 191996d48372d75f) BAM_load 0x1000208d (FUN_10001c10 caches GetCurrentDirectoryA plus a backslash at 0x10228d48 while plugins::Load holds plugins\\ as the working directory), FUN_10002440 0x10002581-0x100025e3 (that directory, then entry 2 of the table 0x10175008, index 0x1018e360 clamped to 0..2), 0x1000266d (load FUN_100e2420: FileStorage 0x100e2529, open 0x10057fa3 reaching cvOpenFileStorage FUN_10067eb0, isOpened 0x100e2558, cvLoad FUN_100679d0 at 0x100e25a3), detectMultiScale empty test 0x100e01d0-0x100e01db, DesktopCam.dll (sha256 4928c27ab0ea5bd0) BAM_load 0x10001856 (FUN_100011d0, buffer 0x103b3330), FUN_10001ee0 0x10001fc0-0x10002022 (entry 2 of 0x1031aee0), 0x10002096 (load FUN_10127870: FileStorage 0x101279c8, isOpened 0x101279f3, cvLoad FUN_100732d0 at 0x10127a62), empty test 0x10127cbb-0x10127cc6, Simple Cam.dll (sha256 3b232df5e99b23c0) BAM_load 0x10002173 (FUN_10001cf0, buffer 0x103a09b8), FUN_10002370 0x1000245e-0x100024c0 (entry 2 of 0x102d9020), 0x1000254a (load FUN_10111db0: FileStorage 0x10111eb9, isOpened 0x10111ee8, cvLoad FUN_1006b1b0 at 0x10111f33), empty test 0x1010fb64-0x1010fb6b, DesktopPS3Eye.dll (sha256 14dbb5b11749622c) BAM_load 0x100018cd (FUN_10001250, buffer 0x1023d748), FUN_100021c0 0x1000231c-0x1000237e (entry 2 of 0x101a6fd8), 0x100023f5 (load FUN_100f97a0: FileStorage 0x100f98f8, isOpened 0x100f9923, cvLoad FUN_10070830 at 0x100f9992), empty test 0x100f9beb-0x100f9bf6" + note: "One cascade is read at a time, the one the plugin index selects (0, 1 or 2), from the plugins\\ directory cached by BAM_load. All four plugins link OpenCV 2.4 statically. cvLoad is the one function holding \"Could not find the/an object in file storage\", and its only caller is the routine the plugin calls with the path, which constructs a FileStorage, returns false when isOpened fails, then falls back to cvLoad: cv::CascadeClassifier::load. The plugin never tests the result. With no cascade, detectMultiScale returns at its empty() test, so no face is reported and the game runs on." # -- Named by the code, absent from both distributions --