Fix GPU lock

This commit is contained in:
lemon-sh 2021-08-20 20:00:09 +02:00
parent 8212aef0ee
commit 6d39b3ebd3

View file

@ -35,28 +35,27 @@ public class Waifu2x {
var inputFile = new File("wfx_input" + inputExtension).toPath().toAbsolutePath();
var outputFile = new File("wfx_output" + outputExtension);
var outputFilePath = outputFile.toPath().toAbsolutePath();
log.info("Starting processing %s image with options noise=%c scale=%c output=%s".formatted(inputExtension, noise, scale, outputExtension));
Files.deleteIfExists(inputFile);
Files.copy(inputImage, inputFile);
Process waifuProcess;
synchronized (GPULock) {
waifuProcess = new ProcessBuilder(ExecutablePath.toString(), "-s", Character.toString(scale), "-n",
Character.toString(noise), "-i", inputFile.toString(), "-o", outputFilePath.toString()).start();
waifuProcess.waitFor();
}
var result = new WaifuResult();
result.filename = outputFile.getName();
Files.delete(inputFile);
log.info(result.stdout = new String(waifuProcess.getErrorStream().readAllBytes(), StandardCharsets.UTF_8));
if (!(result.success = outputFile.isFile())) return result;
var outputBytes = new ByteArrayOutputStream() {
@Override
public synchronized byte[] toByteArray() {
return buf;
}
};
Files.copy(outputFilePath, outputBytes);
Files.delete(outputFilePath);
synchronized (GPULock) {
log.info("Starting processing %s image with options noise=%c scale=%c output=%s".formatted(inputExtension, noise, scale, outputExtension));
Files.deleteIfExists(inputFile);
Files.copy(inputImage, inputFile);
var waifuProcess = new ProcessBuilder(ExecutablePath.toString(), "-s", Character.toString(scale), "-n",
Character.toString(noise), "-i", inputFile.toString(), "-o", outputFilePath.toString()).start();
waifuProcess.waitFor();
Files.delete(inputFile);
log.info(result.stdout = new String(waifuProcess.getErrorStream().readAllBytes(), StandardCharsets.UTF_8));
if (!(result.success = outputFile.isFile())) return result;
Files.copy(outputFilePath, outputBytes);
Files.delete(outputFilePath);
}
result.image = new ByteArrayInputStream(outputBytes.toByteArray(), 0, outputBytes.size());
result.size = outputBytes.size();
return result;