无法配置Camera2 API进行预览

时间:2015-06-26 13:02:32

标签: android android-camera

我需要使用Camera2 API为相机设置预览,以使用它来扫描QR码。我的问题是配置相机。这是我的代码:

<SurfaceView
    android:layout_width="250dp"
    android:layout_height="250dp"
    android:id="@+id/surfaceView"
    android:layout_gravity="center"
    android:layout_centerVertical="true"
    android:layout_centerHorizontal="true" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:text="@string/scanqr"
    android:id="@+id/textView"
    android:gravity="center_horizontal"
    android:layout_above="@+id/surfaceView"
    android:layout_centerHorizontal="true" />

//After I get my CameraDevice...
CameraCharacteristics caracteristicas=cManager.getCameraCharacteristics(chosenCam);
StreamConfigurationMap map = caracteristicas.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
Size[] mPreviewSize = map.getOutputSizes(WHAT TO PUT HERE);
surfaceViewCamera = (SurfaceView)dCamera.findViewById(R.id.surfaceView);       
surfaceViewCamera.getHolder().addCallback(this);

mPreviewRequestBuilder= cDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
Surface surface=surfaceViewCamera.getHolder().getSurface();
mPreviewRequestBuilder.addTarget(surface);
cDevice.createCaptureSession(Arrays.asList(surface),
new CameraCaptureSession.StateCallback(){...onConfigured, onCaptureFailed and onConfigureFailed methods...}

在代码中:

CameraCharacteristics caracteristicas=cManager.getCameraCharacteristics(chosenCam);
StreamConfigurationMap map = caracteristicas.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
Size[] mPreviewSize = map.getOutputSizes(ImageFormat.JPEG);
iReader=ImageReader.newInstance(mPreviewSize[0].getWidth(), mPreviewSize[0].getHeight(),ImageFormat.JPEG, 1);
iReader.setOnImageAvailableListener(new ImageReader.OnImageAvailableListener() {
       @Override
       public void onImageAvailable(ImageReader reader) {

               Log.i("TAG", "We have image. Yay!");
                        }
                    }, backgroundHandler);

我的问题是我不知道如何正确配置相机,因为总是进入onConfigurationFailed方法。有没有帮助呢?有人知道关于该主题的任何好的特定教程吗?

谢谢。

编辑:

没有运气。我的代码现在看起来像这样:

06-29 08:20:50.377    1410-1410/my.package E/Legacy-CameraDevice-JNI﹕ LegacyCameraDevice_nativeDetectSurfaceDimens: Could not retrieve native window from surface.
06-29 08:20:50.388    1410-1410/my.package W/CameraDevice-JV-0﹕ Stream configuration failed
06-29 08:20:51.283    1410-1410/my.package E/CameraCaptureSession﹕ Session 0: Failed to create capture session; configuration failed
06-29 08:21:12.179    1410-1410/my.package I/Choreographer﹕ Skipped 26759 frames!  The application may be doing too much work on its main thread.
06-29 08:21:13.424    1410-1416/my.package W/art﹕ Suspending all threads took: 13.264ms
06-29 08:21:20.458    1410-1416/my.package W/art﹕ Suspending all threads took: 12.178ms
06-29 08:21:24.481    1410-1416/my.package W/art﹕ Suspending all threads took: 7.194ms
06-29 08:21:28.496    1410-1416/my.package W/art﹕ Suspending all threads took: 5.281ms
06-29 08:21:34.031    1410-1416/my.package W/art﹕ Suspending all threads took: 7.869ms
06-29 08:21:39.923    1410-1477/my.package I/OpenGLRenderer﹕ Initialized EGL, version 1.4
06-29 08:21:39.989    1410-1477/my.package W/EGL_emulation﹕ eglSurfaceAttrib not implemented
06-29 08:21:39.989    1410-1477/my.package W/OpenGLRenderer﹕ Failed to set EGL_SWAP_BEHAVIOR on surface 0xb4ba9b60, error=EGL_SUCCESS

我没有收到任何异常,只会转到onConfigurationFailed,并说:

!@£$%^&*()+=

PD:我正在使用模拟器调试,以防它有帮助

0 个答案:

没有答案