繁体   English   中英

Android相机:预览FPS极低

[英]Android camera: very low preview FPS

一周前,我开始研究Android相机API。 我已经成功启动了相机并开始预览,它工作正常。 然后我发现我没有正确初始化和释放相机,所以我对代码进行了大修,现在我遇到了一个最初没有发生的问题:极低的FPS。 大约0.5,即每帧2秒。 有趣的是,我得到一个延迟的帧,然后在(1-15毫秒)之后立即获得第二帧,然后又在下一帧之前延迟了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。顺便说一下,光照条件一直没有改变。

更新:尝试按照此处所述单独的线程中打开相机-无需更改。

params.setRecordingHint(真); 用于开始视频录制开始。

请使用“ params.setRecordingHint(false)”再次检查

请制作您自己的Previewcallbak函数,然后

私人PreviewCallback mPreviewCallback = new PreviewCallback();

.... setPreviewCallback(mPreviewCallback);

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

根据下面的评论,“我已经成功启动了相机并开始预览,并且效果很好。然后我发现我没有正确初始化和释放相机”

我想您最初使用的是摄像机HAL中定义的默认摄像机参数。 尽管尚不清楚“初始化”的含义,但我认为它们可能是相机参数设置。

因此,我建议您删除params的代码,然后再次进行测试。 或者,您可以一一测试

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM