Android相机:预览FPS非常低

时间:2014-10-14 09:24:11

标签: android camera android-camera

一周前,我开始研究Android相机API。我已成功进入相机并开始预览,它工作正常。然后我发现我没有正确初始化和释放相机,所以我对代码进行了一些修改,现在我遇到了一个最初没有出现的问题:极低的FPS。大约0.5,每帧2秒。有趣的是,我得到1帧延迟,然后是第二帧(1-15 ms),然后在下一帧之前再延迟2秒。

这是我的相机初始化代码:

    m_openedCamera = Camera.open(id);
    m_surfaceHolder = new SurfaceView(MyApplication.instance().getApplicationContext()).getHolder();
    Assert.assertNotNull(m_openedCamera);

    // This is required on A500 for some reason
    Camera.Parameters params = m_openedCamera.getParameters();
    params.setPreviewFormat(ImageFormat.NV21);
    params.setPreviewSize(320, 240);
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH)
    {
        params.setRecordingHint(true);
        params.setAutoExposureLock(true);
        params.setAutoWhiteBalanceLock(true);
    }

    m_openedCamera.setParameters(params);

    int bitsPerPx  = ImageFormat.getBitsPerPixel(ImageFormat.NV21);
    int width       = params.getPreviewSize().width;
    int height      = params.getPreviewSize().height;
    int size        = (int)(width * height * bitsPerPx / 8.0);
    m_openedCamera.addCallbackBuffer( new byte[size] );
    m_openedCamera.addCallbackBuffer( new byte[size] );
    m_openedCamera.addCallbackBuffer( new byte[size] );
    m_openedCamera.addCallbackBuffer( new byte[size] );

    m_openedCamera.setErrorCallback(this);
    m_openedCamera.setPreviewDisplay(m_surfaceHolder);
    m_openedCameraFacing = facing;
    m_openedCamera.setPreviewCallback(this);
    m_openedCamera.startPreview();

我刚刚添加了回调缓冲区 - 没有改变任何东西。在我一周前的初始代码中,我没有表面视图,但现在删除它也没有效果。 这也发生在我的第二个更新的平板电脑上,即使FPS在那里更高(8-10),并且那里没有双框架,框架间隔均匀。 FPS曾经至少是20岁。从现在开始,光线条件没有变化,顺便说一句。

更新:尝试按照here描述的单独线程打开相机 - 没有变化。

3 个答案:

答案 0 :(得分:1)

params.setRecordingHint(真);用于开始录像开始。

请用" params.setRecordingHint(false)"

再次检查

答案 1 :(得分:0)

请制作您自己的previewcallbak功能,然后

private PreviewCallback mPreviewCallback = new PreviewCallback();

.... setPreviewCallback(mPreviewCallback);

关于PreviewCallback(),您可以在cts目录中引用CameraTest.Java:cts / tests / tests / hawdware / src / android / hardware / cts

答案 2 :(得分:0)

从下面的评论中 “我已经成功地进入了相机并开始预览,它工作正常。然后我发现我没有初始化并正确释放相机”

我猜您首先使用相机HAL中定义的默认相机参数。虽然目前还不清楚“初始化”是什么意思,但我认为它们很可能是设置摄像机参数。

所以,我建议您删除params的代码,然后再次测试它。 或者,您可以逐个测试

  1. 仅删除“params.setPreviewSize(320,240);”
  2. 仅删除“params.setPreviewFormat(ImageFormat.NV21);”
  3. 删除1和2。