0

我一直在 opengl 应用程序中使用 camera2 来写入 SurfaceTexture。由于这会使图像格式错误,因此我决定使用 ImageReader 对象来捕获 : 中的相机输出,ImageFormat.YUV_420_888如 MLKit 推荐的那样。

当我添加这个时,似乎一切正常,但是当我的应用程序的 FPS 下降一秒钟时,相机停止更新(仅在我使用 ImageReader 时发生)。

我看过类似的帖子:Camera2 ImageReader freezes repeating capture request

但是,我有

        ImageReader reader = ImageReader.newInstance(100, 100,
                ImageFormat.YUV_420_888, 3);
        reader.setOnImageAvailableListener(new ImageReader.OnImageAvailableListener() {
            @Override
            public void onImageAvailable(ImageReader reader) {
                Log.d("FINDME", " ON AVAILABLE STARTED");


                Image image = null;
                try {
                    image = reader.acquireNextImage();
                    //Do whatever you want with your Image
                    if (image != null) {
                        image.close();
                    }
                } catch (IllegalStateException iae) {
                    if (image != null) {
                        image.close();
                    }
                }


                Log.d("FINDME", " ON AVAILABLE DONE");
            }
        }, handler2);

        Surface previewSurface = new Surface(mSurfaceTexture);
        mSurfaces.add(previewSurface);
        mSurfaces.add(reader.getSurface());
        mPreviewBuilder.addTarget(previewSurface);
        mPreviewBuilder.addTarget(reader.getSurface());

        mCameraDevice.createCaptureSession(mSurfaces, mCaptureSessionStateCallback,
                mBackgroundHandler);

并且似乎没有帮助。如果 FPS 保持高,它运行良好,但如果我尝试切换到不同的渲染功能(着色器),fps 可能会下降一瞬间,这会冻结相机。该应用程序仍然运行良好,只是相机源不再更新并且永远不会恢复。并不是所有的着色器都会导致这种情况,只有那些涉及更多的着色器。

在 logcat 我看到:

12-12 22:50:43.824 21329 23300 D FINDME  :  ON AVAILABLE DONE
12-12 22:50:43.854 21329 21371 I MediaRecorderJNI: finalize
12-12 22:50:43.854 21329 21371 I MediaRecorderJNI: release
12-12 22:50:43.854  1015 17804 D MPEG4Writer: Video track stopping. Stop source
12-12 22:50:43.854  1015 17804 E MPEG4Writer: Stop() called but track is not started
12-12 22:50:43.854  1015 17804 D MPEG4Writer: Audio track stopping. Stop source
12-12 22:50:43.854  1015 17804 E MPEG4Writer: Stop() called but track is not started
12-12 22:50:43.855  1015 22459 I ACodec  : [OMX.SEC.naac.enc] Now Executing->Idle
12-12 22:50:43.855  1090 22460 I SEC_BASE_COMP: SEC_OMX_ComponentStateSet: Cur(3) -> Dest(2)
12-12 22:50:43.857  1015 22459 I ACodec  : [OMX.SEC.naac.enc] Now Idle->Loaded
12-12 22:50:43.860  1090 22460 I SEC_BASE_COMP: SEC_OMX_ComponentStateSet: Cur(2) -> Dest(1)
12-12 22:50:43.861  1015 22459 I ACodec  : [OMX.SEC.naac.enc] Now Loaded
12-12 22:50:43.861  1090 25268 I SEC_BASE_COMP: [OMX.SEC.naac.enc]: Normally terminated
12-12 22:50:43.862  1015 22459 I ACodec  :  [OMX.SEC.naac.enc] Now uninitialized
12-12 22:50:43.862  1015 22459 I ACodec  :  [] Now kWhatShutdownCompleted event : 8544
12-12 22:50:43.862  1015 22459 I MediaCodec: Codec shutdown complete
12-12 22:50:43.865  1015 17804 I StagefrightRecorder: property set(service.camera.rec.running, 0) result = 0
12-12 22:50:43.866  1015 22451 I ACodec  : [OMX.qcom.video.encoder.avc] Now Executing->Idle
12-12 22:50:43.883  1015 22451 I ACodec  : [OMX.qcom.video.encoder.avc] Now Idle->Loaded
12-12 22:50:43.883  1015 22451 I ACodec  : [OMX.qcom.video.encoder.avc] Now Loaded
12-12 22:50:43.891  1090  5365 I OMX-VENC: Component Deinit
12-12 22:50:43.891  1090  5365 I OMX-VENC: Video encode perflock released
12-12 22:50:43.892  1015 22451 I ACodec  :  [OMX.qcom.video.encoder.avc] Now uninitialized
12-12 22:50:43.892  1015 22451 I ACodec  :  [] Now kWhatShutdownCompleted event : 8544
12-12 22:50:43.893  1015 22450 I MediaCodec: Codec shutdown complete
12-12 22:50:43.893  1015 22450 I ResourceManagerService: MediaInfo removed 2397600 (width 1080 height 2220) remained 15297120 
12-12 22:50:43.893  1015 22450 I ResourceManagerService: getMediaResourceInfo resourceType : 2, size : 1
12-12 22:50:43.893  1015 22450 I ResourceManagerService: writeResourceInfo (PID : 21329, clientID : 3989906560, non-secure-codec/video-codec:1, 1080x2220(fps:30) - SoftCodec : No, Encorder : Yes)
12-12 22:50:43.893 28011 28024 V ResourceManagerHelper-JNI: JNIMediaResourceHelper::notify eventType : 2, ext1 : 0, ext2 : 0
12-12 22:50:43.893 28011 28024 V ResourceManagerHelper-JNI: notify eventType : 2, ext1 : 0, ext2 : 0
12-12 22:50:43.893  3381 29213 V ResourceManagerHelper-JNI: JNIMediaResourceHelper::notify eventType : 2, ext1 : 0, ext2 : 0
12-12 22:50:43.893  3381 29213 V ResourceManagerHelper-JNI: notify eventType : 2, ext1 : 0, ext2 : 0
12-12 22:50:43.893 28011 28024 I SemMediaResourceHelper: makeMediaResourceInfo mOwnResourceEventExcluded : false, mPid : 28011
12-12 22:50:43.893 28011 28024 I SemMediaResourceHelper: [1] makeMediaResourceInfo resourceType : 2 isSecured : false, pid : 21329, client id : 3989906560
12-12 22:50:43.893  3381 29213 I SemMediaResourceHelper: makeMediaResourceInfo mOwnResourceEventExcluded : false, mPid : 3381
12-12 22:50:43.893  3381 29213 I SemMediaResourceHelper: [1] makeMediaResourceInfo resourceType : 2 isSecured : false, pid : 21329, client id : 3989906560
12-12 22:50:43.893 28011 28047 I SemMediaResourceHelper: onRemove
12-12 22:50:43.893  3381  3381 I SemMediaResourceHelper: onRemove
12-12 22:50:43.893 28011 28047 I DrmMediaResourceHelper: onRemove size = 1
12-12 22:50:43.893 28011 28047 E DrmMediaResourceHelper: onRemove making Dpdrm to 0 second point 
12-12 22:50:43.895   691 11810 V APM_AudioPolicyManager: releaseInput() 1630
12-12 22:50:43.895   691 11810 V APM_AudioPolicyManager: closeInput(1630)
12-12 22:50:43.896 28011 28047 E DrmManagerClient: DRM_DISPLAYPORT_DISABLE failed
12-12 22:50:43.896  1015 17804 V MediaPlayerService: Delete media recorder client
12-12 22:50:43.897   691 11810 D MultiRecordManager: closeInputStream() moduleHandle:10, modulename:primary, stream_in:0xeab9f0d0, source:0, dev:0xeab95fb0
12-12 22:50:43.897   691 11810 I MultiRecordManager: closeInputStream() skipMultiRecord
12-12 22:50:43.897 21329 21371 W System  : A resource failed to call release. 
12-12 22:50:43.898   691 11810 V APM_AudioPolicyManager: releaseInput() exit
12-12 22:50:43.898 21329 22463 E FINDME: VideoFragment: onClosed: android.hardware.camera2.impl.CameraCaptureSessionImpl@83f26d4
12-12 22:50:43.898   691 30849 V APM_AudioPolicyManager: listAudioPorts() role 0 type 0 num_ports 0 ports 0xeab97700
12-12 22:50:43.898   691 30849 V APM_AudioPolicyManager: listAudioPorts() got 0 ports needed 11
12-12 22:50:43.899   691 30849 V APM_AudioPolicyManager: listAudioPorts() role 0 type 0 num_ports 11 ports 0xe70d8d80
12-12 22:50:43.899   691 30849 V APM_AudioPolicyManager: listAudioPorts() got 11 ports needed 11
12-12 22:50:43.899   653  1131 D audio_hw_primary: adev_close_input_stream: enter:stream_handle(0xe885a500)
12-12 22:50:43.899   653  1131 V audio_hw_sec: sec_stop_voice_note_recording
12-12 22:50:43.899   653  1131 D audio_hw_primary: in_standby: enter: stream (0xe885a500) usecase(18: audio-record)
12-12 22:50:43.900   691 11810 V APM_AudioPolicyManager: listAudioPorts() role 0 type 0 num_ports 0 ports 0xeab976a8
12-12 22:50:43.900   691 11810 V APM_AudioPolicyManager: listAudioPorts() got 0 ports needed 11
12-12 22:50:43.900   691 11810 V APM_AudioPolicyManager: listAudioPorts() role 0 type 0 num_ports 11 ports 0xe7093580
12-12 22:50:43.900   691 11810 V APM_AudioPolicyManager: listAudioPorts() got 11 ports needed 11
12-12 22:50:43.908 21329 21376 E BufferQueueProducer: [ImageReader-1280x720f23m3-21329-3] queueBuffer: BufferQueue has been abandoned
12-12 22:50:43.908   982 23334 E Surface : queueBuffer: error queuing buffer to SurfaceTexture, -19
12-12 22:50:43.908   982 23334 E Camera3-OutputStream: returnBufferCheckedLocked: Stream 1: Error queueing buffer to native window: No such device (-19)
12-12 22:50:43.908   982 23334 E Camera3-Device: Can't return buffer to its stream: No such device (-19)
12-12 22:50:43.940 21329 21376 E BufferQueueProducer: [ImageReader-1280x720f23m3-21329-3] dequeueBuffer: BufferQueue has been abandoned
12-12 22:50:43.940   982 23322 E Camera3-OutputStream: getBufferLockedCommon: Stream 1: Can't dequeue next output buffer: No such device (-19)
12-12 22:50:43.940   982 23322 E Camera3-Device: RequestThread: Can't get output buffer, skipping request: No such device (-19)
12-12 22:50:43.949 21329 21376 E BufferQueueProducer: [ImageReader-1280x720f23m3-21329-3] queueBuffer: BufferQueue has been abandoned
12-12 22:50:43.950   982 23334 E Surface : queueBuffer: error queuing buffer to SurfaceTexture, -19
4

0 回答 0