【问题标题】:How to limit preview fps range in android for camera?如何限制android中相机的预览fps范围?
【发布时间】:2014-03-17 14:20:53
【问题描述】:

是否可以限制 android 相机中的 fps 范围.. 尝试更改 .setPreviewFpsRange() 中的值...但帧速率没有改变..它以每秒 30 帧的速度连续出现

【问题讨论】:

  • 你如何检查它是每秒 30 帧?可以分享一下代码示例吗?

标签: android android-camera frame-rate


【解决方案1】:

您可以使用public List<int[]> getSupportedPreviewFpsRange () 查看您的设备支持的 FPS 范围。这是我的:

preview-fps-range-values=(10000,10000),(15000,15000),(15000,30000),(30000,30000);

所以如果我想将 fps 更改为 15,我可以setPreviewFpsRange(15000,15000)

【讨论】:

  • 这行得通.. 但是如果只有一个 fps 范围可用,那么该怎么做... 任何限制回调以避免更多帧速率的方法
  • 当然。根据您的策略,您可以在预览回调函数中执行任何操作来以编程方式更改 FPS。例如,您可以丢帧,或者让线程休眠几毫秒。
  • 使用了 thred.sleep.. 但它阻塞了其他线程.. 你能举一些丢帧的例子吗..
  • 你的线程是如何休眠的?你应该在 onPreviewFrame(byte[] data, Camera camera) 中使用它,你也可以在其中处理所有的预览帧。
  • @yushulx 你能看看这个问题吗:stackoverflow.com/questions/30564273/…
【解决方案2】:

我使用此代码将预览帧速率设置为可能的最低速率,但您可以通过在列表索引中使用 l_last 而不是 l_first 将其设置为可能的最高速率(mCamera 是成员变量引用相机并在代码中的其他位置设置)。

Camera.Parameters l_params = mCamera.getParameters();

List<int[]> frameRates = l_params.getSupportedPreviewFpsRange();
int l_first = 0;
int l_last = frameRates.size() - 1;
int minFps = (frameRates.get(l_first))[Camera.Parameters.PREVIEW_FPS_MIN_INDEX];
int maxFps = (frameRates.get(l_first))[Camera.Parameters.PREVIEW_FPS_MAX_INDEX];
l_params.setPreviewFpsRange(minFps, maxFps);

mCamera.setParameters(l_params);

【讨论】:

  • Camera.Parameters 在 Android L 中已被弃用
  • 我觉得第六行应该是 l_last 而不是 l_first :"int maxFps = (frameRates.get(l_last))[Camera.Parameters.PREVIEW_FPS_MAX_INDEX];"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-28
  • 2015-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-28
相关资源
最近更新 更多