2016-05-23 67 views
0

根据这个文档:https://developer.android.com/reference/android/media/MediaRecorder.html#setCaptureRate%28double%29如何计算的摄像头最大支持的帧速率定分辨率

“如果分辨率可以通过摄像机捕捉,最快 FPS可以使用计算getPreviewFpsRange(int [])“

但我找不到任何关于它的例子。

我试过:

List<Camera.Size> sizes = p.getSupportedPreviewSizes(); 
    p.setPreviewSize(sizes.get(0).width, sizes.get(0).height); 
    cam.setParameters(p); 

即设定预览的大小与所有类型的决议,但呼吁getPreviewFpsRange(int[])总是返回相同的结果,就像5000后 - 宏碁60000 - 30000上的Nexus 4,或5000片剂。这是否意味着这些设备支持所有分辨率的最高fps或者我错过了什么?

有人知道如何计算每个分辨率的最大fps?

+0

如果我理解正确,这个方法应该返回一个固定的值 - 一个固定MIN和MAX的范围。当你修改分辨率时,FPS也会变得固定(理想情况下,虽然实际上它有点波动,但仍然接近固定值)。因此,更改分辨率不会更改此设备和相机的MIN/MAX值。 –

+0

我期待,当我设置更高的分辨率fps范围将有更低的上限... – Ognyan

回答

0

getSupportedPreviewSizes现在是deprecated along with Camera。然而,in AOSP它只返回了一个独立于分辨率的固定帧速率范围列表。一些制造商可能已经改写了这种行为,但我从来没有见过它,并且与特定的预览分辨率相关的方式未定义。

在至少一个设备上,我获得30 FPS的预览分辨率为1280 x 720和15 FPS的其他所有设备,包括320 x 240等低分辨率。我怀疑图形驱动程序针对特定预览分辨率进行了优化,但即使驱动程序使其可用,旧的相机SDK也无法共享此信息。

Camera2接口似乎提供了getHighSpeedVideoFpsRangesFor的形式的解决方案,但我没有自己尝试过。