diff --git a/camera/aidl/android/hardware/camera2/ICameraDeviceCallbacks.aidl b/camera/aidl/android/hardware/camera2/ICameraDeviceCallbacks.aidl index 8308095fb0..28252c0d3e 100644 --- a/camera/aidl/android/hardware/camera2/ICameraDeviceCallbacks.aidl +++ b/camera/aidl/android/hardware/camera2/ICameraDeviceCallbacks.aidl @@ -42,7 +42,9 @@ interface ICameraDeviceCallbacks * Repeating request encountered an error and was stopped. * * @param lastFrameNumber Frame number of the last frame of the streaming request. + * @param repeatingRequestId the ID of the repeating request being stopped */ - oneway void onRepeatingRequestError(in long lastFrameNumber); + oneway void onRepeatingRequestError(in long lastFrameNumber, + in int repeatingRequestId); oneway void onRequestQueueEmpty(); } diff --git a/camera/ndk/impl/ACameraDevice.cpp b/camera/ndk/impl/ACameraDevice.cpp index 229b159bab..3ae208aa14 100644 --- a/camera/ndk/impl/ACameraDevice.cpp +++ b/camera/ndk/impl/ACameraDevice.cpp @@ -1353,7 +1353,8 @@ CameraDevice::ServiceCallback::onRequestQueueEmpty() { } binder::Status -CameraDevice::ServiceCallback::onRepeatingRequestError(int64_t lastFrameNumber) { +CameraDevice::ServiceCallback::onRepeatingRequestError( + int64_t lastFrameNumber, int32_t stoppedSequenceId) { binder::Status ret = binder::Status::ok(); sp dev = mDevice.promote(); @@ -1364,7 +1365,9 @@ CameraDevice::ServiceCallback::onRepeatingRequestError(int64_t lastFrameNumber) Mutex::Autolock _l(dev->mDeviceLock); int repeatingSequenceId = dev->mRepeatingSequenceId; - dev->mRepeatingSequenceId = REQUEST_ID_NONE; + if (stoppedSequenceId == repeatingSequenceId) { + dev->mRepeatingSequenceId = REQUEST_ID_NONE; + } dev->checkRepeatingSequenceCompleteLocked(repeatingSequenceId, lastFrameNumber); diff --git a/camera/ndk/impl/ACameraDevice.h b/camera/ndk/impl/ACameraDevice.h index c566cd295c..855efe1cec 100644 --- a/camera/ndk/impl/ACameraDevice.h +++ b/camera/ndk/impl/ACameraDevice.h @@ -75,7 +75,8 @@ class CameraDevice final : public RefBase { const CaptureResultExtras& resultExtras) override; binder::Status onPrepared(int streamId) override; binder::Status onRequestQueueEmpty() override; - binder::Status onRepeatingRequestError(int64_t lastFrameNumber) override; + binder::Status onRepeatingRequestError(int64_t lastFrameNumber, + int32_t stoppedSequenceId) override; private: const wp mDevice; }; diff --git a/camera/tests/CameraBinderTests.cpp b/camera/tests/CameraBinderTests.cpp index 946e3b8c83..51d92140f3 100644 --- a/camera/tests/CameraBinderTests.cpp +++ b/camera/tests/CameraBinderTests.cpp @@ -217,8 +217,10 @@ public: return binder::Status::ok(); } - virtual binder::Status onRepeatingRequestError(int64_t lastFrameNumber) { + virtual binder::Status onRepeatingRequestError( + int64_t lastFrameNumber, int32_t stoppedSequenceId) { (void) lastFrameNumber; + (void) stoppedSequenceId; Mutex::Autolock l(mLock); mLastStatus = REPEATING_REQUEST_ERROR; mStatusesHit.push_back(mLastStatus); diff --git a/services/camera/libcameraservice/api2/CameraDeviceClient.cpp b/services/camera/libcameraservice/api2/CameraDeviceClient.cpp index 6fd92635c5..c03e8a24f0 100644 --- a/services/camera/libcameraservice/api2/CameraDeviceClient.cpp +++ b/services/camera/libcameraservice/api2/CameraDeviceClient.cpp @@ -1354,7 +1354,7 @@ void CameraDeviceClient::notifyRepeatingRequestError(long lastFrameNumber) { sp remoteCb = getRemoteCallback(); if (remoteCb != 0) { - remoteCb->onRepeatingRequestError(lastFrameNumber); + remoteCb->onRepeatingRequestError(lastFrameNumber, mStreamingRequestId); } Mutex::Autolock idLock(mStreamingRequestIdLock);