Skip to content

Commit

Permalink
Issue zxing#38 : Add minimum FPS to be safe
Browse files Browse the repository at this point in the history
  • Loading branch information
srowen committed Jan 24, 2014
1 parent de6e9db commit 28f2a30
Showing 1 changed file with 29 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ final class CameraConfigurationManager {
//private static final float MAX_EXPOSURE_COMPENSATION = 1.5f;
//private static final float MIN_EXPOSURE_COMPENSATION = 0.0f;
private static final double MAX_ASPECT_DISTORTION = 0.15;
private static final int MIN_FPS = 5;

private final Context context;
private Point screenResolution;
Expand Down Expand Up @@ -91,17 +92,8 @@ void setDesiredCameraParameters(Camera camera, boolean safeMode) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);

initializeTorch(parameters, prefs, safeMode);

// Required for Glass compatibility; also improves battery/CPU performance a tad
List<int[]> supportedPreviewFpsRanges = parameters.getSupportedPreviewFpsRange();
if (supportedPreviewFpsRanges != null && !supportedPreviewFpsRanges.isEmpty()) {
int[] currentFpsRange = new int[2];
parameters.getPreviewFpsRange(currentFpsRange);
int[] minimumPreviewFpsRange = supportedPreviewFpsRanges.get(0);
if (!Arrays.equals(currentFpsRange, minimumPreviewFpsRange)) {
parameters.setPreviewFpsRange(minimumPreviewFpsRange[0], minimumPreviewFpsRange[1]);
}
}

setBestPreviewFPS(parameters);

String focusMode = null;
if (prefs.getBoolean(PreferencesActivity.KEY_AUTO_FOCUS, true)) {
Expand Down Expand Up @@ -218,6 +210,32 @@ private void doSetTorch(Camera.Parameters parameters, boolean newSetting, boolea
*/
}

private static void setBestPreviewFPS(Camera.Parameters parameters) {
// Required for Glass compatibility; also improves battery/CPU performance a tad
List<int[]> supportedPreviewFpsRanges = parameters.getSupportedPreviewFpsRange();
Log.i(TAG, "Supported FPS ranges: " + supportedPreviewFpsRanges);
if (supportedPreviewFpsRanges != null && !supportedPreviewFpsRanges.isEmpty()) {
int[] minimumSuitableFpsRange = null;
for (int[] fpsRange : supportedPreviewFpsRanges) {
if (fpsRange[Camera.Parameters.PREVIEW_FPS_MAX_INDEX] >= MIN_FPS * 1000) {
minimumSuitableFpsRange = fpsRange;
break;
}
}
if (minimumSuitableFpsRange == null) {
Log.i(TAG, "No suitable FPS range?");
} else {
int[] currentFpsRange = new int[2];
parameters.getPreviewFpsRange(currentFpsRange);
if (!Arrays.equals(currentFpsRange, minimumSuitableFpsRange)) {
Log.i(TAG, "Setting FPS range to " + Arrays.toString(minimumSuitableFpsRange));
parameters.setPreviewFpsRange(minimumSuitableFpsRange[Camera.Parameters.PREVIEW_FPS_MIN_INDEX],
minimumSuitableFpsRange[Camera.Parameters.PREVIEW_FPS_MAX_INDEX]);
}
}
}
}

private Point findBestPreviewSizeValue(Camera.Parameters parameters, Point screenResolution) {

List<Camera.Size> rawSupportedSizes = parameters.getSupportedPreviewSizes();
Expand Down

0 comments on commit 28f2a30

Please sign in to comment.