修复资源泄漏

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) 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) 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_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); ALOGW("open %s %d", camera_id.c_str(), camera_orientation);
@ -486,6 +486,8 @@ int NdkCamera::open(const std::string& cameraId) {
void NdkCamera::close() void NdkCamera::close()
{ {
camera_status_t res = ACAMERA_OK;
if (capture_session) if (capture_session)
{ {
ACameraCaptureSession_stopRepeating(capture_session); ACameraCaptureSession_stopRepeating(capture_session);
@ -493,16 +495,14 @@ void NdkCamera::close()
capture_session = 0; capture_session = 0;
} }
if (capture_session_output) if (image_reader_target)
{
ACaptureSessionOutput_free(capture_session_output);
capture_session_output = 0;
}
if (capture_session_output_container)
{ {
ACaptureSessionOutputContainer_free(capture_session_output_container); if (capture_request)
capture_session_output_container = 0; {
res = ACaptureRequest_removeTarget(capture_request, image_reader_target);
}
ACameraOutputTarget_free(image_reader_target);
image_reader_target = 0;
} }
if (capture_request) if (capture_request)
@ -511,15 +511,9 @@ void NdkCamera::close()
capture_request = 0; capture_request = 0;
} }
if (image_reader_target)
{
ACameraOutputTarget_free(image_reader_target);
image_reader_target = 0;
}
if (image_reader_surface) if (image_reader_surface)
{ {
ANativeWindow_release(image_reader_surface); // ANativeWindow_release(image_reader_surface);
image_reader_surface = 0; image_reader_surface = 0;
} }
@ -529,6 +523,22 @@ void NdkCamera::close()
image_reader = 0; 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) if (camera_device)
{ {
ACameraDevice_close(camera_device); ACameraDevice_close(camera_device);

Loading…
Cancel
Save