mirror of
https://github.com/godotengine/godot.git
synced 2025-12-07 13:49:54 +00:00
Merge pull request #113209 from shiena/fix/prevent_freeze_android_camera
Prevent deadlock on Android camera
This commit is contained in:
commit
3a97723ff2
1 changed files with 21 additions and 18 deletions
|
|
@ -489,33 +489,36 @@ void CameraFeedAndroid::onSessionClosed(void *context, ACameraCaptureSession *se
|
|||
}
|
||||
|
||||
void CameraFeedAndroid::deactivate_feed() {
|
||||
// First, remove image listener to prevent new callbacks.
|
||||
if (reader != nullptr) {
|
||||
AImageReader_setImageListener(reader, nullptr);
|
||||
}
|
||||
|
||||
// Stop and close capture session.
|
||||
// These calls may wait for pending callbacks to complete.
|
||||
if (session != nullptr) {
|
||||
ACameraCaptureSession_stopRepeating(session);
|
||||
ACameraCaptureSession_close(session);
|
||||
session = nullptr;
|
||||
}
|
||||
|
||||
if (reader != nullptr) {
|
||||
AImageReader_setImageListener(reader, nullptr);
|
||||
// Now safe to acquire lock and clean up resources.
|
||||
// No new callbacks will be triggered after this point.
|
||||
MutexLock lock(callback_mutex);
|
||||
|
||||
if (device != nullptr) {
|
||||
ACameraDevice_close(device);
|
||||
device = nullptr;
|
||||
}
|
||||
|
||||
{
|
||||
MutexLock lock(callback_mutex);
|
||||
if (reader != nullptr) {
|
||||
AImageReader_delete(reader);
|
||||
reader = nullptr;
|
||||
}
|
||||
|
||||
if (device != nullptr) {
|
||||
ACameraDevice_close(device);
|
||||
device = nullptr;
|
||||
}
|
||||
|
||||
if (reader != nullptr) {
|
||||
AImageReader_delete(reader);
|
||||
reader = nullptr;
|
||||
}
|
||||
|
||||
if (request != nullptr) {
|
||||
ACaptureRequest_free(request);
|
||||
request = nullptr;
|
||||
}
|
||||
if (request != nullptr) {
|
||||
ACaptureRequest_free(request);
|
||||
request = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue