|
|
|
@ -12,8 +12,8 @@ import android.os.Build; |
|
|
|
|
import androidx.annotation.NonNull; |
|
|
|
|
import androidx.annotation.Nullable; |
|
|
|
|
import androidx.annotation.VisibleForTesting; |
|
|
|
|
import androidx.annotation.WorkerThread; |
|
|
|
|
|
|
|
|
|
import android.util.Range; |
|
|
|
|
import android.view.SurfaceHolder; |
|
|
|
|
|
|
|
|
|
import com.google.android.gms.tasks.Task; |
|
|
|
@ -423,6 +423,7 @@ public class Camera1Engine extends CameraEngine implements |
|
|
|
|
applyZoom(params, 0F); |
|
|
|
|
applyExposureCorrection(params, 0F); |
|
|
|
|
applyPlaySounds(mPlaySounds); |
|
|
|
|
applyPreviewFrameRate(params, 0F); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void applyDefaultFocus(@NonNull Camera.Parameters params) { |
|
|
|
@ -666,8 +667,53 @@ public class Camera1Engine extends CameraEngine implements |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override public void setPreviewFrameRate(float previewFrameRate) { |
|
|
|
|
// This method does nothing
|
|
|
|
|
@Override |
|
|
|
|
public void setPreviewFrameRate(float previewFrameRate) { |
|
|
|
|
final float old = previewFrameRate; |
|
|
|
|
mPreviewFrameRate = previewFrameRate; |
|
|
|
|
mHandler.run(new Runnable() { |
|
|
|
|
@Override |
|
|
|
|
public void run() { |
|
|
|
|
if (getEngineState() == STATE_STARTED) { |
|
|
|
|
Camera.Parameters params = mCamera.getParameters(); |
|
|
|
|
if (applyPreviewFrameRate(params, old)) mCamera.setParameters(params); |
|
|
|
|
} |
|
|
|
|
mPreviewFrameRateOp.end(null); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private boolean applyPreviewFrameRate(@NonNull Camera.Parameters params, |
|
|
|
|
float oldPreviewFrameRate) { |
|
|
|
|
List<int[]> fpsRanges = params.getSupportedPreviewFpsRange(); |
|
|
|
|
if (mPreviewFrameRate == 0F) { |
|
|
|
|
// 0F is a special value. Fallback to a reasonable default.
|
|
|
|
|
for (int[] fpsRange : fpsRanges) { |
|
|
|
|
float lower = (float) fpsRange[0] / 1000F; |
|
|
|
|
float upper = (float) fpsRange[1] / 1000F; |
|
|
|
|
if ((lower <= 30F && 30F <= upper) || (lower <= 24F && 24F <= upper)) { |
|
|
|
|
params.setPreviewFpsRange(fpsRange[0], fpsRange[1]); |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
// If out of boundaries, adjust it.
|
|
|
|
|
mPreviewFrameRate = Math.min(mPreviewFrameRate, |
|
|
|
|
mCameraOptions.getPreviewFrameRateMaxValue()); |
|
|
|
|
mPreviewFrameRate = Math.max(mPreviewFrameRate, |
|
|
|
|
mCameraOptions.getPreviewFrameRateMinValue()); |
|
|
|
|
for (int[] fpsRange : fpsRanges) { |
|
|
|
|
float lower = (float) fpsRange[0] / 1000F; |
|
|
|
|
float upper = (float) fpsRange[1] / 1000F; |
|
|
|
|
float rate = Math.round(mPreviewFrameRate); |
|
|
|
|
if (lower <= rate && rate <= upper) { |
|
|
|
|
params.setPreviewFpsRange(fpsRange[0], fpsRange[1]); |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
mPreviewFrameRate = oldPreviewFrameRate; |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//endregion
|
|
|
|
|