bre*_*att 7 android android-camera2
我使用新的camera2 api体验了低FPS率.具体来说,尽管选择了最高的FPS范围(30,30)
characteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES);
Run Code Online (Sandbox Code Playgroud)
并设置它
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE, bestFPSRange);
Run Code Online (Sandbox Code Playgroud)
在我测试过的两款设备(三星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);
Run Code Online (Sandbox Code Playgroud)
基本上,上面的if语句每30个样本采用平均FPS.实际上,在两个设备(1920x1080)的最高分辨率下,我看到fps范围为15-20 fps.然而,在线的其他人似乎表明,无论分辨率如何,30fps应该是可能的,事实上,使用旧的弃用相机API,我可以在具有最高分辨率的两个设备上获得30fps.那我错过了什么?
我已经尝试了TEMPLATE(例如TEMPLATE_PREVIEW)和格式(例如ImageFormat.YUV_420_888)的所有组合.我还忘了哪个旋钮?
编辑:
S5和Z3 Compact被归类为LEGACY设备.我在其他LEGACY设备上测试了这段代码,包括a
三星Galaxy S5
Xperia Z3 Compact
HTC One M9
华为伴侣S
所有这些都以1080p的速度返回低帧率(大约15fps).我发现的其中一部手机LG G4支持FULL配置文件.在那个设备上,我甚至可以在高帧大小的情况下获得30fps.所以我强烈怀疑camera2 api的包装器中存在导致此问题的开销.
S5 和 Z3 Compact 被归类为传统设备。我在其他旧版设备上测试了此代码,包括
三星 Galaxy S5
Xperia Z3 Compact
HTC One M9
华为Mate S
它们都以 1080p 的速度返回低帧速率(大约 15fps)。我发现的一部手机 LG G4 支持完整配置文件。在该设备上,即使在高帧尺寸下我也能获得 30 fps。所以我强烈怀疑camera2 api 的包装器中有开销导致了这个问题。
| 归档时间: |
|
| 查看次数: |
3209 次 |
| 最近记录: |