尽管价值是getPreviewFpsRange的范围内setPreviewFpsRange不工作(s

2019-08-31 16:22发布

这个简单的代码:

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,不支持它,但...

Answer 1:

啊啊! 所以我的寻找答案的一部分,我用我的应用程序检查了我的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不会与帮助。

时间继续搜索。 (:



Answer 2:

我发现,如果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