Merge "Camera: Skip session parameters in case of abandoned streams" into rvc-dev am: f872f88553 am: 847b567792 am: 039efdc3c6
Change-Id: I310ed58ad646fa2ed7962ababf63ef34bf24ca7f
diff --git a/services/camera/libcameraservice/device3/Camera3Device.cpp b/services/camera/libcameraservice/device3/Camera3Device.cpp
index 2d46122..b00a2d9 100644
--- a/services/camera/libcameraservice/device3/Camera3Device.cpp
+++ b/services/camera/libcameraservice/device3/Camera3Device.cpp
@@ -2344,6 +2344,21 @@
}
}
+bool Camera3Device::checkAbandonedStreamsLocked() {
+ if ((mInputStream.get() != nullptr) && (mInputStream->isAbandoned())) {
+ return true;
+ }
+
+ for (size_t i = 0; i < mOutputStreams.size(); i++) {
+ auto stream = mOutputStreams[i];
+ if ((stream.get() != nullptr) && (stream->isAbandoned())) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
bool Camera3Device::reconfigureCamera(const CameraMetadata& sessionParams) {
ATRACE_CALL();
bool ret = false;
@@ -2352,6 +2367,12 @@
nsecs_t maxExpectedDuration = getExpectedInFlightDuration();
Mutex::Autolock l(mLock);
+ if (checkAbandonedStreamsLocked()) {
+ ALOGW("%s: Abandoned stream detected, session parameters can't be applied correctly!",
+ __FUNCTION__);
+ return true;
+ }
+
auto rc = internalPauseAndWaitLocked(maxExpectedDuration);
if (rc == NO_ERROR) {
mNeedConfig = true;
diff --git a/services/camera/libcameraservice/device3/Camera3Device.h b/services/camera/libcameraservice/device3/Camera3Device.h
index b373a64..19ecf4b 100644
--- a/services/camera/libcameraservice/device3/Camera3Device.h
+++ b/services/camera/libcameraservice/device3/Camera3Device.h
@@ -648,6 +648,12 @@
bool reconfigureCamera(const CameraMetadata& sessionParams);
/**
+ * Return true in case of any output or input abandoned streams,
+ * otherwise return false.
+ */
+ bool checkAbandonedStreamsLocked();
+
+ /**
* Filter stream session parameters and configure camera HAL.
*/
status_t filterParamsAndConfigureLocked(const CameraMetadata& sessionParams,