使用新的camera2 api,我的FPS率很低。特别, 尽管从
中选择了最高的FPS范围(30,30)characteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES);
并使用
进行设置mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE, bestFPSRange);
我测试的两款设备(三星S5和Xperia Z3 Compact)的高图像分辨率的平均速率要低得多。以下是我设置OnImageAvailableListener
:
int format = ImageFormat.YUV_420_888;
Size largest = map.getOutputSizes(format)[0];
Log.d("Images", "sizes: " + Arrays.toString(map.getOutputSizes(format)));
mImageReader = ImageReader.newInstance(largest.getWidth(), largest.getHeight(), format,
/* maxImages */50);
mImageReader.setOnImageAvailableListener(new OnImageAvailableListener() {
private int frames = 0;
private long initialTime = SystemClock.elapsedRealtimeNanos();
@Override
public void onImageAvailable(ImageReader reader) {
reader.acquireLatestImage().close();
frames++;
if ((frames % 30) == 0) {
long currentTime = SystemClock.elapsedRealtimeNanos();
long fps = Math.round(frames * 1e9 / (currentTime - initialTime));
Log.d("Image", "frame# : " + frames + ", approximately " + fps + " fps");
frames = 0;
initialTime = SystemClock.elapsedRealtimeNanos();
}
}
}, mBackgroundHandler);
基本上,上面的if语句每30个样本采用平均FPS。实际上,在两个设备(1920x1080)的最高分辨率下,我看到fps范围为15-20 fps。然而,在线的其他人似乎表明,无论分辨率如何,30fps应该是可能的,事实上,使用旧的弃用相机API,我可以在具有最高分辨率的两个设备上获得30fps。那我错过了什么?
我已经尝试过TEMPLATE(例如TEMPLATE_PREVIEW)和格式(例如ImageFormat.YUV_420_888)的所有组合。我还忘了哪个旋钮?
编辑:
S5和Z3 Compact被归类为LEGACY设备。我在其他LEGACY设备上测试了这段代码,包括
三星Galaxy S5
Xperia Z3 Compact
HTC One M9
华为伴侣S
所有这些都在1080p时返回低帧率(大约15fps)。我发现的其中一部手机LG G4支持FULL配置文件。在那个设备上,我甚至可以在高帧大小的情况下获得30fps。所以我强烈怀疑camera2 api的包装器中存在导致此问题的开销。
答案 0 :(得分:1)
S5和Z3 Compact被分类为LEGACY设备。我在其他LEGACY设备(包括
三星Galaxy S5
Xperia Z3 Compact
HTC One M9
华为伴侣S
它们都以1080p返回低帧速率(约15fps)。我发现其中一部手机LG G4支持完整档案。在那台设备上,即使在高帧尺寸下,我也能获得30fps。因此,我强烈怀疑在camera2 api的包装中存在开销,从而导致此问题。