|
19 | 19 |
|
20 | 20 | import edu.wpi.first.util.CombinedRuntimeLoader; |
21 | 21 | import java.io.IOException; |
| 22 | +import java.util.HashMap; |
22 | 23 | import org.photonvision.jni.LibraryLoader; |
23 | 24 |
|
24 | 25 | public class LoadJNI { |
| 26 | + protected static HashMap<JNITypes, Boolean> loadedMap = new HashMap<>(); |
| 27 | + |
25 | 28 | public enum JNITypes { |
26 | | - RUBIK_DETECTOR(false, "tensorflowlite", "tensorflowlite_c", "external_delegate", "rubik_jni"), |
27 | | - RKNN_DETECTOR(false, "rga", "rknnrt", "rknn_jni"), |
28 | | - MRCAL(false, "mrcal_jni"), |
29 | | - LIBCAMERA(false, "photonlibcamera"); |
| 29 | + RUBIK_DETECTOR("tensorflowlite", "tensorflowlite_c", "external_delegate", "rubik_jni"), |
| 30 | + RKNN_DETECTOR("rga", "rknnrt", "rknn_jni"), |
| 31 | + MRCAL("mrcal_jni"), |
| 32 | + LIBCAMERA("photonlibcamera"); |
30 | 33 |
|
31 | | - private volatile boolean hasLoaded; |
32 | 34 | public final String[] libraries; |
33 | 35 |
|
34 | | - JNITypes(boolean hasLoaded, String... libraries) { |
35 | | - this.hasLoaded = hasLoaded; |
| 36 | + JNITypes(String... libraries) { |
36 | 37 | this.libraries = libraries; |
37 | 38 | } |
38 | | - |
39 | | - public boolean hasLoaded() { |
40 | | - return hasLoaded; |
41 | | - } |
42 | | - |
43 | | - public void setHasLoaded(boolean loaded) { |
44 | | - this.hasLoaded = loaded; |
45 | | - } |
46 | 39 | } |
47 | 40 |
|
48 | 41 | public static synchronized void forceLoad(JNITypes type) throws IOException { |
49 | 42 | loadLibraries(); |
50 | 43 |
|
51 | | - if (type.hasLoaded()) { |
| 44 | + if (loadedMap.getOrDefault(type, false)) { |
52 | 45 | return; |
53 | 46 | } |
54 | 47 |
|
55 | 48 | CombinedRuntimeLoader.loadLibraries(LoadJNI.class, type.libraries); |
56 | | - type.setHasLoaded(true); |
| 49 | + loadedMap.put(type, true); |
57 | 50 | } |
58 | 51 |
|
59 | 52 | public static boolean loadLibraries() { |
|
0 commit comments