Articles of android camera2

Camera 2 – API – 使用前置摄像头时图像捕获无效?

在我的相机应用程序中,我有一个按钮可以将相机面向前方或后方更改,我可以使用后置相机捕捉并保存图像,但是当我切换到前置相机时,我无法捕捉图像。 这就是我将相机切换到前面或后面的方式。 ImageView switch_camera =(ImageView) rootview.findViewById(R.id.imageView7); switch_camera.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // facing = characteristics.get(CameraCharacteristics.LENS_FACING); if (facing != null && facing == CameraCharacteristics.LENS_FACING_FRONT) { //isfrontcam=true; try { //manager.openCamera(getBackFacingCameraId(manager), mStateCallback, mBackgroundHandler); closeCamera(); openCamera(mTextureView.getWidth(), mTextureView.getHeight(),”0″); Log.e(“opening “,”BackCam”); facing = 1; } catch (SecurityException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } […]

Andoird camera2输出到ImageReader格式YUV_420_888仍然很慢

我正在尝试让Android camera2在后台服务中运行,然后在回调ImageReader.OnImageAvailableListener中处理帧。 我已经使用建议的原始格式YUV_420_888来获得最大fps,但是我只能在分辨率640×480上获得7fps左右。 这甚至比我使用旧的Camera接口(我想升级到Camera2以获得更高的fps)或使用OpenCV JavaCameraView(我不能使用它,因为我需要在后台服务中运行处理)更慢。 以下是我的服务类。 我错过了什么? 我的手机是运行Android 5.0.2的Redmi Note 3 谢谢。 public class Camera2ServiceYUV extends Service { protected static final String TAG = “VideoProcessing”; protected static final int CAMERACHOICE = CameraCharacteristics.LENS_FACING_BACK; protected CameraDevice cameraDevice; protected CameraCaptureSession captureSession; protected ImageReader imageReader; // A semaphore to prevent the app from exiting before closing the camera. private […]

我如何区分imageReader相机API 2中的NV21和YV12编码?

我正在开发自定义相机API 2应用程序,我注意到当我使用ImageReader回调时,某些设备上的捕获格式转换是不同的。 例如在Nexus 4中工作不正常并且在Nexus5X看起来没问题,这是输出。 我以这种forms初始化ImageReader: mImageReader = ImageReader.newInstance(320, 240, ImageFormat.YUV_420_888,2); 而我的回调是简单的回调ImageReader回调。 mOnImageAvailableListener = new ImageReader.OnImageAvailableListener() { @Override public void onImageAvailable( ImageReader reader) { try { mBackgroundHandler.post( new ImageController(reader.acquireNextImage()) ); } catch(Exception e) { //exception } } }; 在Nexus 4的情况下:我有这个错误。 D/qdgralloc: gralloc_lock_ycbcr: Invalid format passed: 0x32315659 当我尝试在两个设备中编写原始文件时,我有这些不同的图像。 所以我知道Nexus 5X图像具有NV21编码,而Nexus 4具有YV12编码。 我find了图像格式的规范,我尝试在ImageReader中获取格式。 有YV12和NV21选项,但显然,当我尝试获取格式时,我得到YUV_420_888格式。 int test=mImageReader.getImageFormat(); 那么有没有办法让摄像机输入格式(NV21或YV12)区分摄像机类中的这种编码types? CameraCharacteristics也许? […]

Camera2 ImageReader冻结重复捕获请求

我正在尝试使用camera2 API从相机捕获图像数据。 我主要使用的是从android Capture2RAW示例中获取的代码。 在完全停止之前,只有少数图像通过(即调用onImageAvailable)。 我尝试使用不同大小的RAW_SENSOR和JPEG格式捕获相同的结果。 我究竟做错了什么? this.mImageReader = ImageReader.newInstance(width, height, ImageFormat.RAW_SENSOR, /*maxImages*/ 1); Surface surface = this.mImageReader.getSurface(); final List surfaces = Arrays.asList(surface); this.mCamera.createCaptureSession(surfaces, new CameraCaptureSession.StateCallback() { // Callback methods here }, null); CaptureRequest.Builder captureRequestBuilder; captureRequestBuilder = this.mCamera.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW); captureRequestBuilder.addTarget(surface); this.mCaptureRequest = captureRequestBuilder.build(); this.mCaptureSession.setRepeatingRequest(mCaptureRequest, null, null);

Android Camera2 API YUV_420_888到JPEG

我正在使用OnImageAvailableListener获取预览帧: @Override public void onImageAvailable(ImageReader reader) { Image image = null; try { image = reader.acquireLatestImage(); Image.Plane[] planes = image.getPlanes(); ByteBuffer buffer = planes[0].getBuffer(); byte[] data = new byte[buffer.capacity()]; buffer.get(data); //data.length=332803; width=3264; height=2448 Log.e(TAG, “data.length=” + data.length + “; width=” + image.getWidth() + “; height=” + image.getHeight()); //TODO data processing } catch (Exception e) { […]

ImageReader格式在某些设备中被覆盖

我有一个ImageReader ,用于获取预览帧的数据(字节数组)。 它配置了推荐的图像格式YUV_420_888如下所示: mPreviewImageReader = ImageReader.newInstance(width, height, ImageFormat.YUV_420_888, 2); 当我在mPreviewImageReader.setOnImageAvailableListener();设置监听器时mPreviewImageReader.setOnImageAvailableListener(); 被调用,我检索图像: Image image = reader.acquireLatestImage(); 在某些手机中,我在日志中看到以下带有ImageReader_JNI标签的打印输出: ImageReader_imageSetup:覆盖缓冲区格式YUV_420_888到32315659。 我搜索了,似乎格式被覆盖到YV12 。 我试着查看ImageReader的c ++代码并发现了这种情况: int bufFmt = buffer->format; if (imgReaderFmt == HAL_PIXEL_FORMAT_YCbCr_420_888) { bufFmt = buffer->flexFormat; } if (imgReaderFmt != bufFmt) { if (imgReaderFmt == HAL_PIXEL_FORMAT_YCbCr_420_888 && (bufFmt == HAL_PIXEL_FORMAT_YCrCb_420_SP || bufFmt == HAL_PIXEL_FORMAT_YV12)) { // Special casing […]

使用Android camera2进行全屏预览

我正在使用新的camera2 API构建自定义相机。 我的代码基于Google提供的代码示例。 我无法find一种方法来全屏显示相机。 在代码示例中,他们使用比率优化来适应所有屏幕,但它只占屏幕高度的3/4左右。 这是我的AutoFitTextureView代码: public class AutoFitTextureView extends TextureView { private int mRatioWidth = 0; private int mRatioHeight = 0; public AutoFitTextureView(Context context) { this(context, null); } public AutoFitTextureView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public AutoFitTextureView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } /** * Sets the […]

如何在camera2 api,android中锁定焦点?

在我的自定义相机find焦点后,我试图锁定焦点。 首先将AF模式设置为自动: builder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_AUTO); 触摸预览后,它会find焦距,我必须使用以下代码锁定AF和AE: builder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE); builder.set(CaptureRequest.CONTROL_AE_LOCK, true); 锁定AE在任何设备中都能正常工作。 锁定AF适用于Nexus5和Nexus 5x。 但至于三星S5和S6,它一直试图搜索焦点。 锁定焦点的最佳方法是什么?

Camera 2 APIvideo录制 – 自动闪光不工作

我已经实现了一个使用camera2 API记录video的自定义相机。 可以选择将闪光灯设置为“开”,“关”和“自动”。 将闪光灯设置为“自动”不起作用,而其他选项工作正常。 这是代码: private void updateFlash() { Log.e(TAG, “Flash = ” + currentFlash); switch (currentFlash) { case Constants.FLASH_OFF: previewRequestBuilder.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_OFF); break; case Constants.FLASH_ON: previewRequestBuilder.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_TORCH); break; case Constants.FLASH_TORCH: previewRequestBuilder.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_TORCH); break; case Constants.FLASH_AUTO: previewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH); break; } cameraCaptureSession.setRepeatingRequest(previewRequestBuilder.build(), null, null); } 我已经google了很多,并尝试了几乎所有stackoverflow自动闪存的答案,但没有工作。 请帮忙。 我不明白这是什么问题。

使用Camera2 API从服务录制video

我在一些我无法测试的手机上遇到问题(这是第一个问题)我正在尝试构建一个可以从camera2 API录制的服务。 但是当我将应用程序发送到后台时,在某些手机上似乎有一些我目前无法解决的问题。 我只有日志,无法弄清楚应用程序无法正常工作的主要原因。 由于这个类太大而不能在这里显示为代码,你可以在这里find它: https : //github.com/Astyan42/RecordingService/blob/master/RecordingService.java 这是给定的日志文件: https : //github.com/Astyan42/RecordingService/blob/master/logcat.txt 感谢您的帮助