修复资源泄漏

serial
BlueMatthew 1 year ago
parent e1ce0d81dc
commit 815a1a8fbe

@ -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);

Loading…
Cancel
Save