From 15fd93a73aa6c3d31aee69261c65f51a5cec2699 Mon Sep 17 00:00:00 2001 From: Matthew Date: Sun, 9 Mar 2025 18:53:10 +0800 Subject: [PATCH] =?UTF-8?q?=E5=81=9C=E6=AD=A2=E6=8B=8D=E7=85=A7=E5=90=8E?= =?UTF-8?q?=E7=AD=89=E5=BE=85=E4=B8=80=E6=AE=B5=E6=97=B6=E9=97=B4=EF=BC=8C?= =?UTF-8?q?=E7=A1=AE=E4=BF=9Dsession=E5=81=9C=E6=AD=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/cpp/camera2/ndkcamera.cpp | 34 +++++++++++++++++++++++--- app/src/main/cpp/camera2/ndkcamera.h | 4 +-- 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/app/src/main/cpp/camera2/ndkcamera.cpp b/app/src/main/cpp/camera2/ndkcamera.cpp index dd6fe561..70c15b64 100644 --- a/app/src/main/cpp/camera2/ndkcamera.cpp +++ b/app/src/main/cpp/camera2/ndkcamera.cpp @@ -226,6 +226,7 @@ NdkCamera::NdkCamera(int32_t width, int32_t height, const NdkCamera::CAMERA_PARA NdkCamera::~NdkCamera() { + XYLOG(XYLOG_SEVERITY_DEBUG, "NdkCamera::~NdkCamera %s", mCameraId.c_str()); close(); } @@ -1000,6 +1001,8 @@ void NdkCamera::close() } */ + mPreviewResults.reset(); + mCaptureResults.clear(); mCaptureFrames.clear(); if ((ACameraManager *)camera_manager != NULL) @@ -1009,7 +1012,8 @@ void NdkCamera::close() if (capture_session) { - // res = ACameraCaptureSession_stopRepeating(capture_session); + res = ACameraCaptureSession_stopRepeating(capture_session); + std::this_thread::sleep_for(std::chrono::milliseconds(512)); ACameraCaptureSession_close(capture_session); capture_session = 0; } @@ -1051,11 +1055,24 @@ void NdkCamera::close() if (mPreviewImageReader != NULL) { +#ifdef _DEBUG + ALOGD("Will Free mPreviewImageReader"); +#endif + AImage* image = NULL; + media_status_t mstatus; + while ((mstatus = AImageReader_acquireNextImage(mPreviewImageReader, &image)) == AMEDIA_OK) + { + AImage_delete(image); + image = NULL; + } AImageReader_setImageListener(mPreviewImageReader, NULL); //XYLOG(XYLOG_SEVERITY_DEBUG, "CameraStatus::AImageReader_delete %s", mCameraId.c_str()); AImageReader_delete(mPreviewImageReader); //XYLOG(XYLOG_SEVERITY_DEBUG, "CameraStatus::End AImageReader_delete %s", mCameraId.c_str()); mPreviewImageReader = 0; +#ifdef _DEBUG + ALOGD("After Free mPreviewImageReader"); +#endif } if (mOutputTarget != NULL) @@ -1072,9 +1089,13 @@ void NdkCamera::close() if (mImageReader != NULL) { +#ifdef _DEBUG + ALOGD("Will Free mImageReader"); +#endif AImage* image = NULL; - int32_t status; - while ((status = AImageReader_acquireNextImage(mImageReader, &image)) == AMEDIA_OK) { + media_status_t mstatus; + while ((mstatus = AImageReader_acquireNextImage(mImageReader, &image)) == AMEDIA_OK) + { AImage_delete(image); image = NULL; } @@ -1085,6 +1106,9 @@ void NdkCamera::close() //XYLOG(XYLOG_SEVERITY_DEBUG, "CameraStatus::End AImageReader_delete %s", mCameraId.c_str()); mImageReader = 0; +#ifdef _DEBUG + ALOGD("After Free mImageReader"); +#endif } if (mOutputTarget2 != NULL) { @@ -1318,6 +1342,7 @@ void NdkCamera::onImageAvailable(AImageReader* reader) if (captureCompleted && captureDispatchable) { XYLOG(XYLOG_SEVERITY_INFO,"onOneCapture from onImageAvailable"); + camera_status_t status = ACameraCaptureSession_stopRepeating(capture_session); onOneCapture(mCharacteristics, result, mFinalLdr, ts - m_startTime, mOneFrame); } } @@ -1798,6 +1823,7 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque if (captureCompleted && captureDispatchable) { XYLOG(XYLOG_SEVERITY_INFO,"onOneCapture from onCaptureCompleted"); + camera_status_t status = ACameraCaptureSession_stopRepeating(capture_session); onOneCapture(mCharacteristics, captureResult, mFinalLdr, ts - m_startTime, mOneFrame); } } @@ -1824,6 +1850,8 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque void NdkCamera::FireBurstCapture() { + camera_status_t status = ACameraCaptureSession_stopRepeating(capture_session); + unsigned long long ts = GetMicroTimeStamp(); size_t expectedTimes = mCaptureRequests.size() - 1; diff --git a/app/src/main/cpp/camera2/ndkcamera.h b/app/src/main/cpp/camera2/ndkcamera.h index 36680767..dd42b651 100644 --- a/app/src/main/cpp/camera2/ndkcamera.h +++ b/app/src/main/cpp/camera2/ndkcamera.h @@ -268,6 +268,8 @@ protected: std::shared_ptr mCharacteristics; std::vector mCaptureRequests; + ACameraCaptureSession* capture_session; + std::shared_ptr mPreviewResults; std::vector > mCaptureResults; uint32_t mLdr; @@ -279,8 +281,6 @@ protected: cv::Mat mOneFrame; std::vector > mRawFrames; - ACameraCaptureSession* capture_session; - // AImageReader* image_reader; // ANativeWindow* image_reader_surface; // ACameraOutputTarget* image_reader_target;