Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 78048ace authored by Jayant Chowdhary's avatar Jayant Chowdhary Committed by android-build-merger
Browse files

Merge "camera2 ndk/vndk: cleanup->stop CameraDevice's looper in ~ACameraDevice()" into qt-r1-dev

am: 95f6e43f

Change-Id: I201860b7e310cf8032305e08d4e3c5a0595adc52
parents fe403b84 95f6e43f
Loading
Loading
Loading
Loading
+16 −6
Original line number Diff line number Diff line
@@ -28,6 +28,10 @@

#include "ACameraCaptureSession.inc"

ACameraDevice::~ACameraDevice() {
    mDevice->stopLooper();
}

namespace android {
namespace acam {

@@ -116,15 +120,11 @@ CameraDevice::~CameraDevice() {
        if (!isClosed()) {
            disconnectLocked(session);
        }
        LOG_ALWAYS_FATAL_IF(mCbLooper != nullptr,
                "CameraDevice looper should've been stopped before ~CameraDevice");
        mCurrentSession = nullptr;
        if (mCbLooper != nullptr) {
            mCbLooper->unregisterHandler(mHandler->id());
            mCbLooper->stop();
    }
}
    mCbLooper.clear();
    mHandler.clear();
}

void
CameraDevice::postSessionMsgAndCleanup(sp<AMessage>& msg) {
@@ -892,6 +892,16 @@ CameraDevice::onCaptureErrorLocked(
    return;
}

void CameraDevice::stopLooper() {
    Mutex::Autolock _l(mDeviceLock);
    if (mCbLooper != nullptr) {
      mCbLooper->unregisterHandler(mHandler->id());
      mCbLooper->stop();
    }
    mCbLooper.clear();
    mHandler.clear();
}

CameraDevice::CallbackHandler::CallbackHandler(const char* id) : mId(id) {
}

+4 −1
Original line number Diff line number Diff line
@@ -109,6 +109,9 @@ class CameraDevice final : public RefBase {

    inline ACameraDevice* getWrapper() const { return mWrapper; };

    // Stop the looper thread and unregister the handler
    void stopLooper();

  private:
    friend ACameraCaptureSession;
    camera_status_t checkCameraClosedOrErrorLocked() const;
@@ -354,7 +357,7 @@ struct ACameraDevice {
                  sp<ACameraMetadata> chars) :
            mDevice(new android::acam::CameraDevice(id, cb, chars, this)) {}

    ~ACameraDevice() {};
    ~ACameraDevice();

    /*******************
     * NDK public APIs *
+13 −13
Original line number Diff line number Diff line
@@ -45,13 +45,7 @@
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();
    mDevice->stopLooper();
}

namespace android {
@@ -140,14 +134,10 @@ CameraDevice::~CameraDevice() {
            disconnectLocked(session);
        }
        mCurrentSession = nullptr;
        if (mCbLooper != nullptr) {
            mCbLooper->unregisterHandler(mHandler->id());
            mCbLooper->stop();
        LOG_ALWAYS_FATAL_IF(mCbLooper != nullptr,
            "CameraDevice looper should've been stopped before ~CameraDevice");
    }
}
    mCbLooper.clear();
    mHandler.clear();
}

void
CameraDevice::postSessionMsgAndCleanup(sp<AMessage>& msg) {
@@ -1410,6 +1400,16 @@ CameraDevice::checkAndFireSequenceCompleteLocked() {
    }
}

void CameraDevice::stopLooper() {
    Mutex::Autolock _l(mDeviceLock);
    if (mCbLooper != nullptr) {
      mCbLooper->unregisterHandler(mHandler->id());
      mCbLooper->stop();
    }
    mCbLooper.clear();
    mHandler.clear();
}

/**
  * Camera service callback implementation
  */
+3 −0
Original line number Diff line number Diff line
@@ -133,6 +133,9 @@ class CameraDevice final : public RefBase {
    bool setDeviceMetadataQueues();
    inline ACameraDevice* getWrapper() const { return mWrapper; };

    // Stop the looper thread and unregister the handler
    void stopLooper();

  private:
    friend ACameraCaptureSession;
    friend ACameraDevice;