Android相机2的ImageReader在Android 5.0 Galaxy S5上大小不正确

4

我正在尝试应用Camera2 api 来拍摄照片。在 Android 6.0.15.1.1 上获得了正确的结果,但是在 5.0 上没有成功。我不知道为什么。

CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraDevice.getId());

Size[] jpegSizes = null;

if (characteristics != null) {
    jpegSizes = characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP).getOutputSizes(ImageFormat.JPEG);
}


if (jpegSizes != null && 0 < jpegSizes.length) {
    width = jpegSizes[0].getWidth();
    height = jpegSizes[0].getHeight();
    Log.i("jpegSizes width : ", String.valueOf(width));
    Log.i("jpegSizes height : ", String.valueOf(height));
}


ImageReader reader = ImageReader.newInstance(width, height, ImageFormat.JPEG, 1);
        List<Surface> outputSurfaces = new ArrayList<Surface>(2);
        outputSurfaces.add(reader.getSurface());
        outputSurfaces.add(new Surface(new SurfaceTexture(10)));



final CaptureRequest.Builder captureBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE); //  TEMPLATE_VIDEO_SNAPSHOT


captureBuilder.addTarget(reader.getSurface());


captureBuilder.set(CaptureRequest.CONTROL_MODE, CameraMetadata.CONTROL_MODE_AUTO);

这些是jpegSizes数组中的尺寸。

 I/takepic w :: 5312 h : 2988
 I/takepic w :: 3984 h : 2988
 I/takepic w :: 3264 h : 2448
 I/takepic w :: 3264 h : 1836
 I/takepic w :: 2560 h : 1920
 I/takepic w :: 2048 h : 1152
 I/takepic w :: 1920 h : 1080
 I/takepic w :: 1280 h : 960
 I/takepic w :: 1280 h : 720
 I/takepic w :: 800 h : 480
 I/takepic w :: 640 h : 480

我尝试了所有方法,但总是出现以下错误:

E/CameraDevice-0-LE: 大小为 (w=1, h=1) 和格式为 0x1 的 Surface 不合法,大小不在有效集合中:[1920x1080、1440x1080、1280x720、1056x864、960x720、800x480、720x480、640x480、352x288、320x240、176x144]

W/CameraDevice-JV-0: 流配置失败

E/CameraCaptureSession: 会话 0:创建捕获会话失败;配置失败

请帮我找到解决方案。

有什么解决方案吗? - raditya gumay
1个回答

0
在我的情况下,使用 TextureView 而不是 AutoFitTextureView 解决了 Android 5.0 上的大小问题。希望能对某些人有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接