diff --git a/camera/ndk/ndk_vendor/impl/ACameraDevice.cpp b/camera/ndk/ndk_vendor/impl/ACameraDevice.cpp index a43d707e8e..8a3bb46711 100644 --- a/camera/ndk/ndk_vendor/impl/ACameraDevice.cpp +++ b/camera/ndk/ndk_vendor/impl/ACameraDevice.cpp @@ -44,6 +44,16 @@ using namespace android; +ACameraDevice::~ACameraDevice() { + Mutex::Autolock _l(mDevice->mDeviceLock); + if (mDevice->mCbLooper != nullptr) { + mDevice->mCbLooper->unregisterHandler(mDevice->mHandler->id()); + mDevice->mCbLooper->stop(); + } + mDevice->mCbLooper.clear(); + mDevice->mHandler.clear(); +} + namespace android { namespace acam { diff --git a/camera/ndk/ndk_vendor/impl/ACameraDevice.h b/camera/ndk/ndk_vendor/impl/ACameraDevice.h index 829b08452e..d8df5684a7 100644 --- a/camera/ndk/ndk_vendor/impl/ACameraDevice.h +++ b/camera/ndk/ndk_vendor/impl/ACameraDevice.h @@ -135,6 +135,7 @@ class CameraDevice final : public RefBase { private: friend ACameraCaptureSession; + friend ACameraDevice; camera_status_t checkCameraClosedOrErrorLocked() const; @@ -383,8 +384,7 @@ struct ACameraDevice { sp chars) : mDevice(new android::acam::CameraDevice(id, cb, std::move(chars), this)) {} - ~ACameraDevice() {}; - + ~ACameraDevice(); /******************* * NDK public APIs * *******************/