ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – Android使用camera2复制内置视频录制质量和帧率

2019-07-10 13:25:55  阅读:327  来源: 互联网

标签:java android android-camera android-camera2


我使用camera2 API时获得的图像质量和帧率与使用相机应用程序手动将视频录制到文件时获得的图像质量和帧率不匹配.

我正在尝试使用Android上的OpenCV进行实时图像处理.我使用内置的相机应用程序手动录制了一个视频,一切都运行得很好:图像质量很好,帧速率稳定在30 FPS.

我的最小SDK版本是22,所以我使用camera2 API的重复请求.我已将其与ImageReader和YUV_420_888格式一起设置.我已尝试过PREVIEW和RECORD捕获请求模板,尝试在构建器中手动设置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()) { }

解决方法:

在三星Galaxy J3(2016)上,做Camera.Parameters#setRecordingHint(true)(使用不推荐的相机API)实现了我想要的:视频质量和帧率与内置录像机相同.不幸的是,这也意味着我无法修改分辨率,并且设置该提示在Doogee X5 MAX上没有达到同样的效果.

标签:java,android,android-camera,android-camera2
来源: https://codeday.me/bug/20190710/1424390.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有