Loading camera/device/3.4/default/CameraDeviceSession.cpp +3 −1 Original line number Diff line number Diff line Loading @@ -128,7 +128,9 @@ void CameraDeviceSession::configureStreams_3_4_Impl( } camera3_stream_configuration_t stream_list{}; stream_list.stream_configuration_counter = streamConfigCounter; // Block reading mStreamConfigCounter until configureStream returns Mutex::Autolock _sccl(mStreamConfigCounterLock); mStreamConfigCounter = streamConfigCounter; hidl_vec<camera3_stream_t*> streams; stream_list.session_parameters = paramBuffer; if (!preProcessConfigurationLocked_3_4(requestedConfiguration, &stream_list, &streams)) { Loading camera/device/3.4/default/include/device_v3_4_impl/CameraDeviceSession.h +4 −0 Original line number Diff line number Diff line Loading @@ -123,6 +123,10 @@ protected: // Physical camera ids for the logical multi-camera. Empty if this // is not a logical multi-camera. std::unordered_set<std::string> mPhysicalCameraIds; Mutex mStreamConfigCounterLock; uint32_t mStreamConfigCounter = 1; private: struct TrampolineSessionInterface_3_4 : public ICameraDeviceSession { Loading camera/device/3.5/default/CameraDeviceSession.cpp +18 −4 Original line number Diff line number Diff line Loading @@ -72,6 +72,22 @@ Return<void> CameraDeviceSession::configureStreams_3_5( Return<void> CameraDeviceSession::signalStreamFlush( const hidl_vec<int32_t>& streamIds, uint32_t streamConfigCounter) { if (mDevice->ops->signal_stream_flush == nullptr) { return Void(); } uint32_t currentCounter = 0; { Mutex::Autolock _l(mStreamConfigCounterLock); currentCounter = mStreamConfigCounter; } if (streamConfigCounter < currentCounter) { ALOGV("%s: streamConfigCounter %d is stale (current %d), skipping signal_stream_flush call", __FUNCTION__, streamConfigCounter, mStreamConfigCounter); return Void(); } std::vector<camera3_stream_t*> streams(streamIds.size()); { Mutex::Autolock _l(mInflightLock); Loading @@ -84,10 +100,8 @@ Return<void> CameraDeviceSession::signalStreamFlush( streams[i] = &mStreamMap[id]; } } if (mDevice->ops->signal_stream_flush != nullptr) { mDevice->ops->signal_stream_flush(mDevice, streamConfigCounter, streams.size(), streams.data()); } mDevice->ops->signal_stream_flush(mDevice, streams.size(), streams.data()); return Void(); } Loading Loading
camera/device/3.4/default/CameraDeviceSession.cpp +3 −1 Original line number Diff line number Diff line Loading @@ -128,7 +128,9 @@ void CameraDeviceSession::configureStreams_3_4_Impl( } camera3_stream_configuration_t stream_list{}; stream_list.stream_configuration_counter = streamConfigCounter; // Block reading mStreamConfigCounter until configureStream returns Mutex::Autolock _sccl(mStreamConfigCounterLock); mStreamConfigCounter = streamConfigCounter; hidl_vec<camera3_stream_t*> streams; stream_list.session_parameters = paramBuffer; if (!preProcessConfigurationLocked_3_4(requestedConfiguration, &stream_list, &streams)) { Loading
camera/device/3.4/default/include/device_v3_4_impl/CameraDeviceSession.h +4 −0 Original line number Diff line number Diff line Loading @@ -123,6 +123,10 @@ protected: // Physical camera ids for the logical multi-camera. Empty if this // is not a logical multi-camera. std::unordered_set<std::string> mPhysicalCameraIds; Mutex mStreamConfigCounterLock; uint32_t mStreamConfigCounter = 1; private: struct TrampolineSessionInterface_3_4 : public ICameraDeviceSession { Loading
camera/device/3.5/default/CameraDeviceSession.cpp +18 −4 Original line number Diff line number Diff line Loading @@ -72,6 +72,22 @@ Return<void> CameraDeviceSession::configureStreams_3_5( Return<void> CameraDeviceSession::signalStreamFlush( const hidl_vec<int32_t>& streamIds, uint32_t streamConfigCounter) { if (mDevice->ops->signal_stream_flush == nullptr) { return Void(); } uint32_t currentCounter = 0; { Mutex::Autolock _l(mStreamConfigCounterLock); currentCounter = mStreamConfigCounter; } if (streamConfigCounter < currentCounter) { ALOGV("%s: streamConfigCounter %d is stale (current %d), skipping signal_stream_flush call", __FUNCTION__, streamConfigCounter, mStreamConfigCounter); return Void(); } std::vector<camera3_stream_t*> streams(streamIds.size()); { Mutex::Autolock _l(mInflightLock); Loading @@ -84,10 +100,8 @@ Return<void> CameraDeviceSession::signalStreamFlush( streams[i] = &mStreamMap[id]; } } if (mDevice->ops->signal_stream_flush != nullptr) { mDevice->ops->signal_stream_flush(mDevice, streamConfigCounter, streams.size(), streams.data()); } mDevice->ops->signal_stream_flush(mDevice, streams.size(), streams.data()); return Void(); } Loading