From 815a1a8fbea9e4b6cf533a34e377ac4bc8429273 Mon Sep 17 00:00:00 2001 From: BlueMatthew Date: Wed, 10 Jan 2024 21:34:47 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=B5=84=E6=BA=90=E6=B3=84?= =?UTF-8?q?=E6=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/cpp/camera2/ndkcamera.cpp | 46 ++++++++++++++++---------- 1 file changed, 28 insertions(+), 18 deletions(-) diff --git a/app/src/main/cpp/camera2/ndkcamera.cpp b/app/src/main/cpp/camera2/ndkcamera.cpp index 7c0b3617..d9b9dcdb 100644 --- a/app/src/main/cpp/camera2/ndkcamera.cpp +++ b/app/src/main/cpp/camera2/ndkcamera.cpp @@ -61,7 +61,7 @@ static void onSessionClosed(void* context, ACameraCaptureSession *session) void onCaptureFailed(void* context, ACameraCaptureSession* session, ACaptureRequest* request, ACameraCaptureFailure* failure) { - ALOGW("onCaptureFailed %p %p %p", session, request, failure); + ALOGW("onCaptureFailed session=%p request=%p reason=%d", session, request, failure->reason); } void onCaptureSequenceCompleted(void* context, ACameraCaptureSession* session, int sequenceId, int64_t frameNumber) @@ -361,7 +361,7 @@ int NdkCamera::open(const std::string& cameraId) { // ANativeWindow_setBuffersGeometry(image_reader_surface, width, height,WINDOW_FORMAT_RGBX_8888); - ANativeWindow_acquire(image_reader_surface); + // ANativeWindow_acquire(image_reader_surface); } ALOGW("open %s %d", camera_id.c_str(), camera_orientation); @@ -486,6 +486,8 @@ int NdkCamera::open(const std::string& cameraId) { void NdkCamera::close() { + camera_status_t res = ACAMERA_OK; + if (capture_session) { ACameraCaptureSession_stopRepeating(capture_session); @@ -493,16 +495,14 @@ void NdkCamera::close() capture_session = 0; } - if (capture_session_output) - { - ACaptureSessionOutput_free(capture_session_output); - capture_session_output = 0; - } - - if (capture_session_output_container) + if (image_reader_target) { - ACaptureSessionOutputContainer_free(capture_session_output_container); - capture_session_output_container = 0; + if (capture_request) + { + res = ACaptureRequest_removeTarget(capture_request, image_reader_target); + } + ACameraOutputTarget_free(image_reader_target); + image_reader_target = 0; } if (capture_request) @@ -511,15 +511,9 @@ void NdkCamera::close() capture_request = 0; } - if (image_reader_target) - { - ACameraOutputTarget_free(image_reader_target); - image_reader_target = 0; - } - if (image_reader_surface) { - ANativeWindow_release(image_reader_surface); + // ANativeWindow_release(image_reader_surface); image_reader_surface = 0; } @@ -529,6 +523,22 @@ void NdkCamera::close() image_reader = 0; } + if (capture_session_output) + { + if (capture_session_output_container) + { + ACaptureSessionOutputContainer_remove(capture_session_output_container, capture_session_output); + } + ACaptureSessionOutput_free(capture_session_output); + capture_session_output = 0; + } + + if (capture_session_output_container) + { + ACaptureSessionOutputContainer_free(capture_session_output_container); + capture_session_output_container = 0; + } + if (camera_device) { ACameraDevice_close(camera_device);