4

这个简单的代码:

Camera.Parameters params = currentCamera.getParameters();
params.setPreviewFpsRange( 10000, 15000 );
currentCamera.setParameters( params );

不适用于我的 Nexus 4(或我的摩托罗拉 Atrix),尽管允许的值在 5000 到 120000 的允许范围内。

当我尝试分别使用不同于 5000 和 120000 的任何最小值或最大值时,我得到:

setPreviewFpsRange(const android::QCameraParameters&): error: FPS range 
value not supported

这很愚蠢。此外,我在旧的 Motorola Atrix 上尝试了此代码(显示有效的 fps 范围在 10000 到 30000 之间),但它也不起作用。有什么可以做的吗?

从我对该主题的搜索中,我发现 a) 任何地方都没有关于该主题的材料,并且 b) 某些平台可能根本不支持此功能。有点奇怪,谷歌目前的旗舰手机 Nexus 4 不支持它,不过……

4

2 回答 2

18

啊啊!因此,作为我寻找答案的一部分,我用我的应用检查了我的 Nexus 10 的操作。事实证明,getSupportedFpsRange 函数返回的值是表示可以输入到 setPreviewFpsRange 的精确双精度的范围,并且不支持任何其他双精度(据我所知,无论如何。)

我发现这一点是因为 Nexus 10 从 getSupportedFpsRange 返回了多个副本。我在这里复制了三个设备的 getSupportedFpsRange 返回值。

支持的范围值示例

LG Nexus 4:

预览-fps-range-values=(5000,120000);

摩托罗拉 Atrix:

预览-fps-范围值=(10000,30000);

三星 Nexus 10:

预览-fps-范围值=(15000,15000),(24000,24000),(25000,25000),(15000,30000),(30000,30000);

结论

我们做不到

params.setPreviewFpsRange( 29000, 29000 );

强制预览为 29fps,除非设备已经特别支持该双精度。

当然,我研究这个功能的最初原因是希望在我自己的应用程序中复制 Nexus 4 丝般流畅的相机预览。这似乎最终证明,至少在 Nexus 4 上,setPreviewFpsRange 无济于事。

是时候继续搜索了。(:

于 2013-04-22T02:02:53.737 回答
-2

我发现如果 getSupportedPreviewFpsRange 列表只有一对支持的值,例如 (2000, 35000),即 2fp 到 35fps,那么它将接受该范围之间的任何值。

如果列表包含更多对,那么您需要使用其中之一

List<int[]> fpsRange = param.getSupportedPreviewFpsRange();

if (fpsRange.size() == 1) {
    //fpsRange.get(0)[0] < CAMERA_PREVIEW_FPS < fpsRange.get(0)[1]
    param.setPreviewFpsRange(CAMERA_PREVIEW_FPS, CAMERA_PREVIEW_FPS);
} else {
    //pick first from list to limit framerate or last to maximize framerate
    param.setPreviewFpsRange(fpsRange.get(0)[0], fpsRange.get(0)[1]);
}
于 2015-07-09T11:19:14.177 回答