如何修复 Android.harware.Camera 中的 setParameters 失败?
How to fix setParameters Failed in Android.harware.Camera?
嗨
我在多台设备上都遇到了这个错误,
setParameters Failed
...在 Android 中创建相机应用时。
是什么原因造成的?
这是我到目前为止在打开 camera
时所做的设置 Parameters
:
public void surfaceCreated(SurfaceHolder surfaceHolder ) {
try {
camera = camera.open();
} catch (Exception e) {
Log.e(getString(R.string.app_name), "failed to open Camera");
e.printStackTrace();
}
try {
camera.setPreviewDisplay(surfaceHolder);
camera.startPreview();
}catch (Exception e){
}
}
@Override
public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {
refreshCamera();
setDisplayOrientation();
Camera.Parameters parameters = camera.getParameters();
camera.setFaceDetectionListener(faceDetectionListener);
camera.startFaceDetection();
parameters.setPreviewFrameRate(20);
List<Camera.Size> customSizes = parameters.getSupportedPreviewSizes();
Camera.Size customSize = customSizes.get(0); //Added size
parameters.setPreviewSize(customSize.width, customSize.height);
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
camera.setParameters(parameters);
camera.setDisplayOrientation(90);
camera.setParameters(parameters);
camera.startPreview();
}
@Override
public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
if (camera != null) {
camera.stopPreview();
}
}
public void frontCamera(View view) {
camera.stopPreview();
camera.release();
camera=null;
if (cameraId == 0){
try {
camera = camera.open(1);
} catch (Exception e) {
Log.e(getString(R.string.app_name), "failed to open Camera");
e.printStackTrace();
}
android.hardware.Camera.Parameters parameters;
camera.setFaceDetectionListener(faceDetectionListener);
camera.startFaceDetection();
parameters = camera.getParameters();
parameters.setPreviewFrameRate(20);
List<Camera.Size> customSizes = parameters.getSupportedPreviewSizes();
Camera.Size customSize = customSizes.get(0); //Added size
parameters.setPreviewSize(customSize.width, customSize.height);
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
camera.setParameters(parameters);
camera.setDisplayOrientation(90);
cameraId = 1;
try {
camera.setPreviewDisplay(surfaceHolder);
camera.startPreview();
}catch (Exception e){
}
}
+ 我试图在互联网上进行研究,我发现了这个:
List<Camera.Size> customSizes = parameters.getSupportedPreviewSizes();
Camera.Size customSize = customSizes.get(0); //Added size
parameters.setPreviewSize(customSize.width, customSize.height);
但仍然导致 setParameters
错误...
你的方法startFaceDetection()
应该在预览开始后调用,因为相机会通知Camera.FaceDetectionListener
预览框中检测到的面孔的数量。
parameters.setPreviewFrameRate(20);
List<Camera.Size> customSizes = parameters.getSupportedPreviewSizes();
Camera.Size customSize = customSizes.get(0); //Added size
parameters.setPreviewSize(customSize.width, customSize.height);
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
camera.setParameters(parameters);
camera.setDisplayOrientation(90);
camera.setParameters(parameters);
camera.startPreview();
camera.setFaceDetectionListener(faceDetectionListener);
camera.startFaceDetection();
- 您知道有问题的相机支持 FOCUS_MODE_CONTINUOUS_PICTURE 吗? 不能保证。检查 getSupportedFocusModes()。如果您使用任何类型的不受支持的模式,相机可能无法设置参数。
- 您知道相机支持 20 帧速率吗? 不能保证。检查 getSupportedPreviewFpsRange。同样,如果您使用不受支持的帧速率值,相机可能无法设置参数。
- 而且,正如 Jan 所说,startFaceDetection() 应该仅在预览开始后调用 。老实说,乱序执行会导致 setParameters 错误有点令人惊讶。
嗨
我在多台设备上都遇到了这个错误,
setParameters Failed
...在 Android 中创建相机应用时。
是什么原因造成的?
这是我到目前为止在打开 camera
时所做的设置 Parameters
:
public void surfaceCreated(SurfaceHolder surfaceHolder ) {
try {
camera = camera.open();
} catch (Exception e) {
Log.e(getString(R.string.app_name), "failed to open Camera");
e.printStackTrace();
}
try {
camera.setPreviewDisplay(surfaceHolder);
camera.startPreview();
}catch (Exception e){
}
}
@Override
public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {
refreshCamera();
setDisplayOrientation();
Camera.Parameters parameters = camera.getParameters();
camera.setFaceDetectionListener(faceDetectionListener);
camera.startFaceDetection();
parameters.setPreviewFrameRate(20);
List<Camera.Size> customSizes = parameters.getSupportedPreviewSizes();
Camera.Size customSize = customSizes.get(0); //Added size
parameters.setPreviewSize(customSize.width, customSize.height);
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
camera.setParameters(parameters);
camera.setDisplayOrientation(90);
camera.setParameters(parameters);
camera.startPreview();
}
@Override
public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
if (camera != null) {
camera.stopPreview();
}
}
public void frontCamera(View view) {
camera.stopPreview();
camera.release();
camera=null;
if (cameraId == 0){
try {
camera = camera.open(1);
} catch (Exception e) {
Log.e(getString(R.string.app_name), "failed to open Camera");
e.printStackTrace();
}
android.hardware.Camera.Parameters parameters;
camera.setFaceDetectionListener(faceDetectionListener);
camera.startFaceDetection();
parameters = camera.getParameters();
parameters.setPreviewFrameRate(20);
List<Camera.Size> customSizes = parameters.getSupportedPreviewSizes();
Camera.Size customSize = customSizes.get(0); //Added size
parameters.setPreviewSize(customSize.width, customSize.height);
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
camera.setParameters(parameters);
camera.setDisplayOrientation(90);
cameraId = 1;
try {
camera.setPreviewDisplay(surfaceHolder);
camera.startPreview();
}catch (Exception e){
}
}
+ 我试图在互联网上进行研究,我发现了这个:
List<Camera.Size> customSizes = parameters.getSupportedPreviewSizes();
Camera.Size customSize = customSizes.get(0); //Added size
parameters.setPreviewSize(customSize.width, customSize.height);
但仍然导致 setParameters
错误...
你的方法startFaceDetection()
应该在预览开始后调用,因为相机会通知Camera.FaceDetectionListener
预览框中检测到的面孔的数量。
parameters.setPreviewFrameRate(20);
List<Camera.Size> customSizes = parameters.getSupportedPreviewSizes();
Camera.Size customSize = customSizes.get(0); //Added size
parameters.setPreviewSize(customSize.width, customSize.height);
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
camera.setParameters(parameters);
camera.setDisplayOrientation(90);
camera.setParameters(parameters);
camera.startPreview();
camera.setFaceDetectionListener(faceDetectionListener);
camera.startFaceDetection();
- 您知道有问题的相机支持 FOCUS_MODE_CONTINUOUS_PICTURE 吗? 不能保证。检查 getSupportedFocusModes()。如果您使用任何类型的不受支持的模式,相机可能无法设置参数。
- 您知道相机支持 20 帧速率吗? 不能保证。检查 getSupportedPreviewFpsRange。同样,如果您使用不受支持的帧速率值,相机可能无法设置参数。
- 而且,正如 Jan 所说,startFaceDetection() 应该仅在预览开始后调用 。老实说,乱序执行会导致 setParameters 错误有点令人惊讶。