摄像机收紧并不总是根据图片大小进行JPEG回调



我遇到的问题, camera.takePicture() jpeg回调的频率较低,而所需的图片大小更高。例如。它总是以640x480的速度成功,但仅在5%至40%的情况下使用较小的参数调整(3264x2444分辨率)。相关代码:

public void foo(View view) {
    Camera.PictureCallback jpegCallback = new Camera.PictureCallback(){
        @Override
        public void onPictureTaken(byte[] bytes, Camera camera) {
            camera.release();
            Toast.makeText(SurvCamActivity.getInstance(), "jpeg callback", Toast.LENGTH_SHORT).show();
        }
    };
    //Gets desired resolution
    SpinnerResolution res = getSelectedSpinnerResolution();
    Camera camera = getCameraInstance();
    try {
        Camera.Parameters params = camera.getParameters();
        params.setPictureSize(res.width, res.height);
        camera.setParameters(params);
        camera.setPreviewTexture(new SurfaceTexture(R.layout.fragment_preview));
        camera.startPreview();
        camera.takePicture(null, null, jpegCallback);
    } catch (IOException e) {
        e.printStackTrace();
    } 
}

现在奇怪的是,如果我将断点添加到camera.takePicture(),并且只需恢复执行,一旦线程到达那里,它总是会调用JPEG回调。当我在camera.takePicture()之后添加Thread.sleep(700)时,它也开始始终执行回调。有任何想法吗?在Nexus 4。

上测试

您在启动jpegCallback.onPictureTaken()之前不能再次调用camera.takePicture(),因此您需要油门进行button.onClick()。如果您一直将相机保持在预览模式。

,您可能可以减少他的滞后。

编辑:事实证明,相机对象可能已经收集了垃圾。我创建了对它的静态引用,现在它可以毫无问题地工作。

最新更新