Android的副本内置的视频录制质量和使用camera2帧率

问题描述 投票:4回答:1

图像质量和帧率使用camera2 API不匹配,一个我是说我用相机应用到文件中手动录制视频时,我得到。

我试图做Android上使用OpenCV的实时图像处理。我一直在使用手动录制视频内置相机应用程序,一切都非常完美:图像质量是好的,帧率是一个稳定的30 FPS。

我分SDK版本是22,所以我用了camera2 API的重复请求。我曾与一个ImageReader和YUV_420_888格式设置它,在一起。我曾经尝试都将PREVIEWRECORD捕获请求模板,尝试手动在构建器设置18个捕获请求参数(如禁用自动白平衡,设置色彩校正模式快),但FPS还是8左右9,图像质量差,以及。另外手机产生同样的结果,尽管它的最大。 FPS是16.67(而不是30)。

罪魁祸首是不是我的图像处理(这发生在另一个线程,除了读取图像的缓冲剂):我检查了FPS的时候,我不与框架做任何事(我甚至没有显示图像),但仍8-9。

您可以看到,这里的相关代码:

//constructor:
HandlerThread thread = new HandlerThread("MyApp:CameraCallbacks", Process.THREAD_PRIORITY_MORE_FAVORABLE);
thread.start();
captureCallbackHandler = new Handler(thread.getLooper());
//some UI event:
cameraManager.openCamera(cameraId, new CameraStateCallback()), null);
//CameraStateCallback#onOpened:
//size is 1280x720, same as the manually captured video's
imageReader = ImageReader.newInstance(size.getWidth(), size.getHeight(), ImageFormat.YUV_420_888, 1);
imageReader.setOnImageAvailableListener(new ImageAvailableListener(), captureCallbackHandler);
camera.createCaptureSession(Collections.singletonList(imageReader.getSurface()), new CaptureStateCallback(), captureCallbackHandler);
//CaptureStateCallback#onConfigured:
CaptureRequest.Builder builder = activeCamera.createCaptureRequest(CameraDevice.TEMPLATE_RECORD);
builder.addTarget(imageReader.getSurface());
//setting the FPS range has no effect: this phone only has one option
session.setRepeatingRequest(builder.build(), null, captureCallbackHandler);
//ImageAvailableListener#onImageAvailable:
long current = System.nanoTime();
deltaTime += (current - last - deltaTime) * 0.1;
Log.d("MyApp", "onImageAvailable FPS: " + (1000000000 / deltaTime));
//prints around 8.7
last = current;
try (Image image = reader.acquireLatestImage()) { }
java android android-camera android-camera2
1个回答
0
投票

在三星Galaxy J3(2016),做Camera.Parameters#setRecordingHint(true)(同时使用过时的相机API)达到正是我想要的:视频质量和帧率变得一样的内置录像机的。不幸的是,这也意味着我无法修改分辨率,并设置该提示并没有取得在道格X5 MAX此相同的效果。

© www.soinside.com 2019 - 2024. All rights reserved.