这个简单的代码:
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
这是愚蠢的。 另外,我想在我的旧的摩托罗拉Atrix(其中显示了一个有效的FPS范围是10000和30000之间),它也不起作用此代码。 凡是可以做什么?
从我的话题搜索我发现一)在有关的话题很少材料的任何地方,和b)这可能是因为这个功能仅仅是由一些平台不支持的情况下。 这是一个有点怪,谷歌目前的旗舰手机,Nexus的4,不支持它,但...
啊啊! 所以我的寻找答案的一部分,我用我的应用程序检查了我的Nexus 10的操作。 事实证明,该getSupportedFpsRange函数返回是代表精确的二倍体即可以输入到setPreviewFpsRange和任何其他二倍体范围的值是不支持的(据我所知,反正。)
我发现这一点,因为从getSupportedFpsRange了Nexus 10返回多个二倍体。 我在这里重复这三个设备的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 );
迫使预览是在29FPS,除非设备已经具体地支持二倍。
当然,最初的原因,我正在调查这个功能是在自己的应用程序复制的Nexus 4的柔滑摄像头预览的希望。 这似乎证明决定性的是,在的Nexus 4,至少,setPreviewFpsRange不会与帮助。
时间继续搜索。 (:
我发现,如果getSupportedPreviewFpsRange列表仅具有一对支持的值等(2000,35000),其被2FP到35FPS那么它将接受该范围之间的任何值。
如果列表containt更多对,那么你需要使用其中之一
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]);
}
文章来源: setPreviewFpsRange not working despite values being within getPreviewFpsRange's range