尽管值在getPreviewFpsRange的范围内,setPreviewFpsRange仍无法正常工作

reo*_*eor 4 android frame-rate android-camera nexus-4

这个简单的代码:

Camera.Parameters params = currentCamera.getParameters();
params.setPreviewFpsRange( 10000, 15000 );
currentCamera.setParameters( params );
Run Code Online (Sandbox Code Playgroud)

虽然允许值介于5000到120000的允许范围内,但我的Nexus 4(或我的摩托罗拉Atrix)不起作用.

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

setPreviewFpsRange(const android::QCameraParameters&): error: FPS range 
value not supported
Run Code Online (Sandbox Code Playgroud)

这很傻.此外,我在我的旧版摩托罗拉Atrix(它显示有效的fps范围介于10000和30000之间)上尝试了此代码,它也无效.有什么可以做的吗?

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

reo*_*eor 17

啊啊!因此,作为搜索答案的一部分,我使用我的应用程序检查了Nexus 10的操作.事实证明,getSupportedFpsRange函数返回的值是表示可以输入到setPreviewFpsRange的精确重复的范围,并且不支持任何其他重复(无论如何,我都知道).

我发现这是因为Nexus 10从getSupportedFpsRange返回多个双工.我在这里复制了三个设备的getSupportedFpsRange返回值.

支持的范围值的示例

LG Nexus 4:

预览FPS-范围值=(5000,120000);

摩托罗拉Atrix:

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

三星Nexus 10:

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

结论

我们做不到

params.setPreviewFpsRange( 29000, 29000 );
Run Code Online (Sandbox Code Playgroud)

强制预览为29fps,除非设备已经特别支持该复制.

当然,我正在调查这个功能的原因是为了在我自己的应用程序中复制Nexus 4的丝滑平滑相机预览.这似乎最终证明,至少在Nexus 4上,setPreviewFpsRange对此无济于事.

是时候继续搜索了.(: