private Camera openCamera(boolean front_camera, int width, int height, int framerate, SurfaceTexture st) {
Camera camera = null;
Camera.CameraInfo info = new Camera.CameraInfo();
int numCameras = Camera.getNumberOfCameras();
for (int i = 0; i < numCameras; i++) {
Camera.getCameraInfo(i, info);
if (front_camera && info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
camera = Camera.open(i);
break;
}
if (!front_camera && info.facing == Camera.CameraInfo.CAMERA_FACING_BACK) {
camera = Camera.open(i);
break;
}
}
if (camera == null) {
Log.d(TAG, "No front-facing camera found; opening default");
camera = Camera.open(); // opens first back-facing camera
if (camera == null) {
throw new RuntimeException("Unable to open camera");
}
}
Camera.Parameters parameters = camera.getParameters();
// parameters.setPreviewFormat(ImageFormat.YV12);
CameraUtils.choosePreviewSize(parameters, width, height);
CameraUtils.chooseFixedPreviewFps(parameters, framerate * 1000);
if (parameters.getSupportedAntibanding().contains(Parameters.ANTIBANDING_50HZ)) {
parameters.setAntibanding(Parameters.ANTIBANDING_50HZ);
}
if (parameters.getSupportedFocusModes().contains(Parameters.FOCUS_MODE_AUTO)) {
parameters.setFocusMode(Parameters.FOCUS_MODE_AUTO);
}
camera.setParameters(parameters);
try {
camera.setPreviewTexture(st);
} catch (IOException e) {
e.printStackTrace();
camera.release();
return null;
}
camera.startPreview();
return camera;
}