Loading services/camera/libcameraservice/device3/Camera3Device.cpp +19 −24 Original line number Diff line number Diff line Loading @@ -1777,13 +1777,6 @@ void Camera3Device::internalUpdateStatusLocked(Status status) { mStatusChanged.broadcast(); } void Camera3Device::pauseStateNotify(bool enable) { Mutex::Autolock il(mInterfaceLock); Mutex::Autolock l(mLock); mPauseStateNotify = enable; } // Pause to reconfigure status_t Camera3Device::internalPauseAndWaitLocked(nsecs_t maxExpectedDuration) { if (mRequestThread.get() != nullptr) { Loading Loading @@ -2359,7 +2352,7 @@ bool Camera3Device::checkAbandonedStreamsLocked() { return false; } bool Camera3Device::reconfigureCamera(const CameraMetadata& sessionParams) { bool Camera3Device::reconfigureCamera(const CameraMetadata& sessionParams, int clientStatusId) { ATRACE_CALL(); bool ret = false; Loading @@ -2373,7 +2366,16 @@ bool Camera3Device::reconfigureCamera(const CameraMetadata& sessionParams) { return true; } auto rc = internalPauseAndWaitLocked(maxExpectedDuration); status_t rc = NO_ERROR; bool markClientActive = false; if (mStatus == STATUS_ACTIVE) { markClientActive = true; mPauseStateNotify = true; mStatusTracker->markComponentIdle(clientStatusId, Fence::NO_FENCE); rc = internalPauseAndWaitLocked(maxExpectedDuration); } if (rc == NO_ERROR) { mNeedConfig = true; rc = configureStreamsLocked(mOperatingMode, sessionParams, /*notifyRequestThread*/ false); Loading Loading @@ -2401,6 +2403,10 @@ bool Camera3Device::reconfigureCamera(const CameraMetadata& sessionParams) { ALOGE("%s: Failed to pause streaming: %d", __FUNCTION__, rc); } if (markClientActive) { mStatusTracker->markComponentActive(clientStatusId); } return ret; } Loading Loading @@ -4277,22 +4283,11 @@ bool Camera3Device::RequestThread::threadLoop() { } if (res == OK) { sp<StatusTracker> statusTracker = mStatusTracker.promote(); if (statusTracker != 0) { sp<Camera3Device> parent = mParent.promote(); if (parent != nullptr) { parent->pauseStateNotify(true); } statusTracker->markComponentIdle(mStatusId, Fence::NO_FENCE); if (parent != nullptr) { mReconfigured |= parent->reconfigureCamera(mLatestSessionParams); mReconfigured |= parent->reconfigureCamera(mLatestSessionParams, mStatusId); } statusTracker->markComponentActive(mStatusId); setPaused(false); } if (mNextRequests[0].captureRequest->mInputStream != nullptr) { mNextRequests[0].captureRequest->mInputStream->restoreConfiguredState(); Loading services/camera/libcameraservice/device3/Camera3Device.h +2 −9 Original line number Diff line number Diff line Loading @@ -637,18 +637,11 @@ class Camera3Device : sp<CaptureRequest> createCaptureRequest(const PhysicalCameraSettingsList &request, const SurfaceMap &surfaceMap); /** * Pause state updates to the client application. Needed to mask out idle/active * transitions during internal reconfigure */ void pauseStateNotify(bool enable); /** * Internally re-configure camera device using new session parameters. * This will get triggered by the request thread. Be sure to call * pauseStateNotify(true) before going idle in the requesting location. * This will get triggered by the request thread. */ bool reconfigureCamera(const CameraMetadata& sessionParams); bool reconfigureCamera(const CameraMetadata& sessionParams, int clientStatusId); /** * Return true in case of any output or input abandoned streams, Loading Loading
services/camera/libcameraservice/device3/Camera3Device.cpp +19 −24 Original line number Diff line number Diff line Loading @@ -1777,13 +1777,6 @@ void Camera3Device::internalUpdateStatusLocked(Status status) { mStatusChanged.broadcast(); } void Camera3Device::pauseStateNotify(bool enable) { Mutex::Autolock il(mInterfaceLock); Mutex::Autolock l(mLock); mPauseStateNotify = enable; } // Pause to reconfigure status_t Camera3Device::internalPauseAndWaitLocked(nsecs_t maxExpectedDuration) { if (mRequestThread.get() != nullptr) { Loading Loading @@ -2359,7 +2352,7 @@ bool Camera3Device::checkAbandonedStreamsLocked() { return false; } bool Camera3Device::reconfigureCamera(const CameraMetadata& sessionParams) { bool Camera3Device::reconfigureCamera(const CameraMetadata& sessionParams, int clientStatusId) { ATRACE_CALL(); bool ret = false; Loading @@ -2373,7 +2366,16 @@ bool Camera3Device::reconfigureCamera(const CameraMetadata& sessionParams) { return true; } auto rc = internalPauseAndWaitLocked(maxExpectedDuration); status_t rc = NO_ERROR; bool markClientActive = false; if (mStatus == STATUS_ACTIVE) { markClientActive = true; mPauseStateNotify = true; mStatusTracker->markComponentIdle(clientStatusId, Fence::NO_FENCE); rc = internalPauseAndWaitLocked(maxExpectedDuration); } if (rc == NO_ERROR) { mNeedConfig = true; rc = configureStreamsLocked(mOperatingMode, sessionParams, /*notifyRequestThread*/ false); Loading Loading @@ -2401,6 +2403,10 @@ bool Camera3Device::reconfigureCamera(const CameraMetadata& sessionParams) { ALOGE("%s: Failed to pause streaming: %d", __FUNCTION__, rc); } if (markClientActive) { mStatusTracker->markComponentActive(clientStatusId); } return ret; } Loading Loading @@ -4277,22 +4283,11 @@ bool Camera3Device::RequestThread::threadLoop() { } if (res == OK) { sp<StatusTracker> statusTracker = mStatusTracker.promote(); if (statusTracker != 0) { sp<Camera3Device> parent = mParent.promote(); if (parent != nullptr) { parent->pauseStateNotify(true); } statusTracker->markComponentIdle(mStatusId, Fence::NO_FENCE); if (parent != nullptr) { mReconfigured |= parent->reconfigureCamera(mLatestSessionParams); mReconfigured |= parent->reconfigureCamera(mLatestSessionParams, mStatusId); } statusTracker->markComponentActive(mStatusId); setPaused(false); } if (mNextRequests[0].captureRequest->mInputStream != nullptr) { mNextRequests[0].captureRequest->mInputStream->restoreConfiguredState(); Loading
services/camera/libcameraservice/device3/Camera3Device.h +2 −9 Original line number Diff line number Diff line Loading @@ -637,18 +637,11 @@ class Camera3Device : sp<CaptureRequest> createCaptureRequest(const PhysicalCameraSettingsList &request, const SurfaceMap &surfaceMap); /** * Pause state updates to the client application. Needed to mask out idle/active * transitions during internal reconfigure */ void pauseStateNotify(bool enable); /** * Internally re-configure camera device using new session parameters. * This will get triggered by the request thread. Be sure to call * pauseStateNotify(true) before going idle in the requesting location. * This will get triggered by the request thread. */ bool reconfigureCamera(const CameraMetadata& sessionParams); bool reconfigureCamera(const CameraMetadata& sessionParams, int clientStatusId); /** * Return true in case of any output or input abandoned streams, Loading