setPreviewSize 仅在某些设备上无法正常工作
setPreviewSize doesn't work propertly only in some devices
我正在使用 OpenCV 本机开发应用程序,并在 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]
因此,似乎在某些设备中,无法打开提供分辨率的预览。这是怎么回事?
如果您调用 Nexus 设备似乎会失败:
mCamera.setPreviewDisplay(mSurfaceHolder);
调用前:
Camera.Parameters parameters = mCamera.getParameters();
parameters.setPreviewFormat(ImageFormat.NV21);
parameters.setPreviewSize(desiredSize.width, desiredSize.height);
mCamera.setParameters(parameters);
因此,如果您希望您的相机在 Nexus 上工作,请先设置预览大小,然后将 Surface Holder 设置为预览显示。
我遇到了同样的问题。真正修复它的是调用:
mCamera.setParameters(parameters);
设置我自己的参数后。显然,您通过该行告诉相机更新更改的参数。
我正在使用 OpenCV 本机开发应用程序,并在 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]
因此,似乎在某些设备中,无法打开提供分辨率的预览。这是怎么回事?
如果您调用 Nexus 设备似乎会失败:
mCamera.setPreviewDisplay(mSurfaceHolder);
调用前:
Camera.Parameters parameters = mCamera.getParameters();
parameters.setPreviewFormat(ImageFormat.NV21);
parameters.setPreviewSize(desiredSize.width, desiredSize.height);
mCamera.setParameters(parameters);
因此,如果您希望您的相机在 Nexus 上工作,请先设置预览大小,然后将 Surface Holder 设置为预览显示。
我遇到了同样的问题。真正修复它的是调用:
mCamera.setParameters(parameters);
设置我自己的参数后。显然,您通过该行告诉相机更新更改的参数。