Switches CameraServer on Arm to use non-included native library

This commit is contained in:
Thad House
2016-11-05 11:37:12 -07:00
parent 6d1ab7606b
commit 38a3eda6a7
3 changed files with 51 additions and 44 deletions

View File

@@ -20,53 +20,53 @@ public class CameraServerJNI {
static {
if (!libraryLoaded) {
try {
String osname = System.getProperty("os.name");
String resname;
if (osname.startsWith("Windows"))
resname = "/Windows/" + System.getProperty("os.arch") + "/";
else
resname = "/" + osname + "/" + System.getProperty("os.arch") + "/";
//System.out.println("platform: " + resname);
if (osname.startsWith("Windows"))
resname += "cameraserver.dll";
else if (osname.startsWith("Mac"))
resname += "libcameraserver.dylib";
else
resname += "libcameraserver.so";
InputStream is = CameraServerJNI.class.getResourceAsStream(resname);
if (is != null) {
// create temporary file
if (System.getProperty("os.name").startsWith("Windows"))
jniLibrary = File.createTempFile("CameraServerJNI", ".dll");
else if (System.getProperty("os.name").startsWith("Mac"))
jniLibrary = File.createTempFile("libCameraServerJNI", ".dylib");
System.loadLibrary("cameraserver");
} catch (UnsatisfiedLinkError e) {
try {
String osname = System.getProperty("os.name");
String resname;
if (osname.startsWith("Windows"))
resname = "/Windows/" + System.getProperty("os.arch") + "/";
else
jniLibrary = File.createTempFile("libCameraServerJNI", ".so");
// flag for delete on exit
jniLibrary.deleteOnExit();
OutputStream os = new FileOutputStream(jniLibrary);
resname = "/" + osname + "/" + System.getProperty("os.arch") + "/";
System.out.println("platform: " + resname);
if (osname.startsWith("Windows"))
resname += "cameraserver.dll";
else if (osname.startsWith("Mac"))
resname += "libcameraserver.dylib";
else
resname += "libcameraserver.so";
InputStream is = CameraServerJNI.class.getResourceAsStream(resname);
if (is != null) {
// create temporary file
if (System.getProperty("os.name").startsWith("Windows"))
jniLibrary = File.createTempFile("CameraServerJNI", ".dll");
else if (System.getProperty("os.name").startsWith("Mac"))
jniLibrary = File.createTempFile("libCameraServerJNI", ".dylib");
else
jniLibrary = File.createTempFile("libCameraServerJNI", ".so");
// flag for delete on exit
jniLibrary.deleteOnExit();
OutputStream os = new FileOutputStream(jniLibrary);
byte[] buffer = new byte[1024];
int readBytes;
try {
while ((readBytes = is.read(buffer)) != -1) {
os.write(buffer, 0, readBytes);
byte[] buffer = new byte[1024];
int readBytes;
try {
while ((readBytes = is.read(buffer)) != -1) {
os.write(buffer, 0, readBytes);
}
} finally {
os.close();
is.close();
}
} finally {
os.close();
is.close();
}
try {
System.load(jniLibrary.getAbsolutePath());
} catch (UnsatisfiedLinkError e) {
} else {
System.loadLibrary("cameraserver");
}
} else {
System.loadLibrary("cameraserver");
} catch (IOException ex) {
ex.printStackTrace();
System.exit(1);
}
} catch (IOException ex) {
ex.printStackTrace();
System.exit(1);
}
libraryLoaded = true;
}