一周前,我开始研究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描述的单独线程打开相机 - 没有变化。
答案 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的代码,然后再次测试它。 或者,您可以逐个测试