setPreviewFrameRate是在api level1就开始使用了,然后不是简单地设置这个方法就可以让摄像头每秒捕获多少帧数的。
比如我设置2,它一秒不会只捕获2帧数据的,从日志记录来看,相当糟糕,不会是预期的2帧,于是我查找文档,发现这个方法已经废除了。
在api level9时加入了一个方法setPreviewFpsRange (int min, int max)
预览帧数从min到max,这个值再*1000.
这个方法已经在高版本的sdk中取代了旧的setPreviewFrameRate。
如何知道摄像头的预览范围呢?我原以为从1到n,其实不然。
getSupportedPreviewFpsRange()这个方法就可以显示出你的手机摄像头支持的范围。
- List<int[]> range=parameters.getSupportedPreviewFpsRange();
- Log.d(TAG, "range:"+range.size());
- for(int j=0;j
- int[] r=range.get(j);
- for(int k=0;k
- Log.d(TAG, TAG+r[k]);
- }
- }
如i9000会是7-30而不是1-30.。。
所以在Camera.PreviewCallback回调中,onPreviewFrame会得到的帧数就不会小于7了。
我还一直以为预览帧数是2,看到的画面还是很流畅。。。
- 文档里还有这么一段话:
- Gets the supported preview fps (frame-per-second) ranges. Each range contains a minimum fps and maximum fps. If minimum fps equals to maximum fps, the camera outputs frames in fixed frame rate. If not, the camera outputs frames in auto frame rate. The actual frame rate fluctuates between the minimum and the maximum. The values are multiplied by 1000 and represented in integers. For example, if frame rate is 26.623 frames per second, the value is 26623.
-
- 如果最大值与最小值是一样的,就是以这个值输出预览,如果不同,则会以这个区间自动输出。
- 看上去,预览帧数还是不可控制的啊