setPreviewSize仅在某些设备中无法正常工作

时间:2015-05-12 15:48:21

标签: android opencv camera java-native-interface android-camera

我正在使用OpenCV native开发一个应用程序,并用Java打开相机。我的应用程序可以在MotoG中运行,但是当我使用其他设备时,它会失败。

我的预览回调发送图像,我收到此错误:

E/Camera-JNI(22013): Callback buffer was too small! Expected 3110400 bytes, but got 460800 bytes!

我的相机使用以下功能打开:

_camera.startPreview();
...
for (Size s : parameters.getSupportedPreviewSizes()) 
...
parameters.setPreviewSize(desiredSize.width, desiredSize.height); // 640x480 in runtime

但是,错误意味着缓冲区出了问题。

460800 = 640x480x1.5 // width x height x YUV format, as I configured in setpreviewsize
3110400 = 1920x1080x1.5 // other size x YUV format, I didn't do this!

我在设备中发现了一些令人不安的日志:

E/mm-camera-sensor(319): port_sensor_caps_reserve:155 ide 30002 stream type 1 w*h 1920*1080
...
I/QCameraParameters(303): initDefaultParameters: supported preview sizes: 1920x1080,1440x1080,1280x720,1056x864,960x720,720x480,640x480,352x288,320x240,176x144
I/QCameraParameters(303): set Default prview sizes : 1920x1080
I/ShotCommon(303): Preview width(1920), height(1080)
I/ShotCommon(303): Preview color format [yuv420sp]

因此,似乎在某些设备中,预览不会以提供的分辨率打开。发生了什么事?

2 个答案:

答案 0 :(得分:1)

如果你打电话,似乎Nexus设备失败了:

 mCamera.setPreviewDisplay(mSurfaceHolder);

致电之前:

Camera.Parameters parameters = mCamera.getParameters();
parameters.setPreviewFormat(ImageFormat.NV21);
parameters.setPreviewSize(desiredSize.width, desiredSize.height);
mCamera.setParameters(parameters);

因此,如果您希望相机适用于Nexus,请首先设置预览尺寸,然后将曲面支架设置为预览显示。

答案 1 :(得分:0)

我遇到了同样的问题。实际修复它的是打电话:

mCamera.setParameters(parameters); 

设置我自己的参数后。显然,您可以告诉相机更新已更改的参数。