Extract retry handling

Move the code to downscale and retry on error out of the catch-block.

Refs 26b4104844
refactor-encoder.3
Romain Vimont 1 year ago
parent a9b2697f3e
commit a52053421a

@ -108,20 +108,10 @@ public class ScreenEncoder implements Device.RotationListener {
codec.stop();
} catch (IllegalStateException | IllegalArgumentException e) {
Ln.e("Encoding error: " + e.getClass().getName() + ": " + e.getMessage());
if (!downsizeOnError || firstFrameSent) {
// Fail immediately
if (!prepareRetry(device, screenInfo)) {
throw e;
}
int newMaxSize = chooseMaxSizeFallback(screenInfo.getVideoSize());
if (newMaxSize == 0) {
// Definitively fail
throw e;
}
// Retry with a smaller device size
Ln.i("Retrying with -m" + newMaxSize + "...");
device.setMaxSize(newMaxSize);
Ln.i("Retrying...");
alive = true;
} finally {
codec.reset();
@ -137,6 +127,25 @@ public class ScreenEncoder implements Device.RotationListener {
}
}
private boolean prepareRetry(Device device, ScreenInfo screenInfo) {
if (!downsizeOnError || firstFrameSent) {
// Must fail immediately
return false;
}
int newMaxSize = chooseMaxSizeFallback(screenInfo.getVideoSize());
Ln.i("newMaxSize = " + newMaxSize);
if (newMaxSize == 0) {
// Must definitively fail
return false;
}
// Retry with a smaller device size
Ln.i("Retrying with -m" + newMaxSize + "...");
device.setMaxSize(newMaxSize);
return true;
}
private static int chooseMaxSizeFallback(Size failedSize) {
int currentMaxSize = Math.max(failedSize.getWidth(), failedSize.getHeight());
for (int value : MAX_SIZE_FALLBACK) {

Loading…
Cancel
Save