3

一部の Android 5.0 デバイスで Android の Camera2 API を使用してプレビュー出力サーフェスとして RenderScript 割り当てを使用すると問題が発生し、原因の特定に苦労しています。

以下のように入力割り当てを作成します。

Type.Builder yuvTypeBuilder = new Type.Builder(mRenderScript, Element.YUV(mRenderScript));
yuvTypeBuilder.setX(width);
yuvTypeBuilder.setY(height);
yuvTypeBuilder.setYuvFormat(ImageFormat.YUV_420_888);
mInputAllocation = Allocation.createTyped(mRenderScript, yuvTypeBuilder.create(), Allocation.USAGE_IO_INPUT | Allocation.USAGE_SCRIPT);

そして、この割り当てをリクエスト ビルダーとキャプチャ セッションのプレビュー サーフェスとして使用します。

mPreviewRequestBuilder = mCamera.createCaptureRequest( CameraDevice.TEMPLATE_PREVIEW );
mPreviewRequestBuilder.addTarget( mInputAllocation.getSurface() );

List<Surface> outputSurfaces = Arrays.asList( mInputAllocation.getSurface() );
mCamera.createCaptureSession( outputSurfaces, mCallback, mHandler );

ただし、セッションでキャプチャを試みるたびに、次のようになりますonConfigured

mCaptureSession.setRepeatingRequest( mPreviewRequestBuilder.build(), mCaptureCallback, mHandler );

IllegalArgumentException と、次のようなエラー ログがスローされます。

I/CameraManager(16589): Using legacy camera HAL.
...
D/Camera  (16589): app passed NULL surface
E/CameraDevice-0-LE(16589): submitRequestList - cannot use a surface that wasn't configured

このまったく同じコードは、私がテストした 6.0 デバイスでも問題なく動作します。プレビュー サーフェスを ImageReader に変更すると、5.0 デバイスも動作します。

4

0 に答える 0