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

Commit dfd13b71 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-dev

am: 4574d4ed

Change-Id: Id1c3ce2ef868add8abe26774dfaf7a578b0df990
parents 253e8188 4574d4ed
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 *
+16 −6
Original line number Diff line number Diff line
@@ -44,6 +44,10 @@

using namespace android;

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

namespace android {
namespace acam {

@@ -130,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) {
@@ -1400,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
  */
+4 −1
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;

@@ -383,7 +386,7 @@ struct ACameraDevice {
                  sp<ACameraMetadata> chars) :
            mDevice(new android::acam::CameraDevice(id, cb, std::move(chars), this)) {}

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

    /*******************
     * NDK public APIs *