Loading services/camera/libcameraservice/device3/Camera3Device.cpp +16 −1 Original line number Diff line number Diff line Loading @@ -4045,6 +4045,7 @@ Camera3Device::RequestThread::RequestThread(wp<Camera3Device> parent, mRepeatingLastFrameNumber( hardware::camera2::ICameraDeviceUser::NO_IN_FLIGHT_REPEATING_FRAMES), mPrepareVideoStream(false), mConstrainedMode(false), mRequestLatency(kRequestLatencyBinSize), mSessionParamKeys(sessionParamKeys), mLatestSessionParams(sessionParamKeys.size()) { Loading @@ -4068,6 +4069,7 @@ void Camera3Device::RequestThread::configurationComplete(bool isConstrainedHighS mLatestSessionParams = sessionParams; // Prepare video stream for high speed recording. mPrepareVideoStream = isConstrainedHighSpeed; mConstrainedMode = isConstrainedHighSpeed; } status_t Camera3Device::RequestThread::queueRequestList( Loading Loading @@ -4482,6 +4484,17 @@ nsecs_t Camera3Device::RequestThread::calculateMaxExpectedDuration(const camera_ return maxExpectedDuration; } bool Camera3Device::RequestThread::skipHFRTargetFPSUpdate(int32_t tag, const camera_metadata_ro_entry_t& newEntry, const camera_metadata_entry_t& currentEntry) { if (mConstrainedMode && (ANDROID_CONTROL_AE_TARGET_FPS_RANGE == tag) && (newEntry.count == currentEntry.count) && (currentEntry.count == 2) && (currentEntry.data.i32[1] == newEntry.data.i32[1])) { return true; } return false; } bool Camera3Device::RequestThread::updateSessionParameters(const CameraMetadata& settings) { ATRACE_CALL(); bool updatesDetected = false; Loading Loading @@ -4514,9 +4527,11 @@ bool Camera3Device::RequestThread::updateSessionParameters(const CameraMetadata& if (isDifferent) { ALOGV("%s: Session parameter tag id %d changed", __FUNCTION__, tag); mLatestSessionParams.update(entry); if (!skipHFRTargetFPSUpdate(tag, entry, lastEntry)) { updatesDetected = true; } mLatestSessionParams.update(entry); } } else if (lastEntry.count > 0) { // Value has been removed ALOGV("%s: Session parameter tag id %d removed", __FUNCTION__, tag); Loading services/camera/libcameraservice/device3/Camera3Device.h +7 −0 Original line number Diff line number Diff line Loading @@ -861,6 +861,11 @@ class Camera3Device : // Check and update latest session parameters based on the current request settings. bool updateSessionParameters(const CameraMetadata& settings); // Check whether FPS range session parameter re-configuration is needed in constrained // high speed recording camera sessions. bool skipHFRTargetFPSUpdate(int32_t tag, const camera_metadata_ro_entry_t& newEntry, const camera_metadata_entry_t& currentEntry); // Re-configure camera using the latest session parameters. bool reconfigureCamera(); Loading Loading @@ -919,6 +924,8 @@ class Camera3Device : // Flag indicating if we should prepare video stream for video requests. bool mPrepareVideoStream; bool mConstrainedMode; static const int32_t kRequestLatencyBinSize = 40; // in ms CameraLatencyHistogram mRequestLatency; Loading Loading
services/camera/libcameraservice/device3/Camera3Device.cpp +16 −1 Original line number Diff line number Diff line Loading @@ -4045,6 +4045,7 @@ Camera3Device::RequestThread::RequestThread(wp<Camera3Device> parent, mRepeatingLastFrameNumber( hardware::camera2::ICameraDeviceUser::NO_IN_FLIGHT_REPEATING_FRAMES), mPrepareVideoStream(false), mConstrainedMode(false), mRequestLatency(kRequestLatencyBinSize), mSessionParamKeys(sessionParamKeys), mLatestSessionParams(sessionParamKeys.size()) { Loading @@ -4068,6 +4069,7 @@ void Camera3Device::RequestThread::configurationComplete(bool isConstrainedHighS mLatestSessionParams = sessionParams; // Prepare video stream for high speed recording. mPrepareVideoStream = isConstrainedHighSpeed; mConstrainedMode = isConstrainedHighSpeed; } status_t Camera3Device::RequestThread::queueRequestList( Loading Loading @@ -4482,6 +4484,17 @@ nsecs_t Camera3Device::RequestThread::calculateMaxExpectedDuration(const camera_ return maxExpectedDuration; } bool Camera3Device::RequestThread::skipHFRTargetFPSUpdate(int32_t tag, const camera_metadata_ro_entry_t& newEntry, const camera_metadata_entry_t& currentEntry) { if (mConstrainedMode && (ANDROID_CONTROL_AE_TARGET_FPS_RANGE == tag) && (newEntry.count == currentEntry.count) && (currentEntry.count == 2) && (currentEntry.data.i32[1] == newEntry.data.i32[1])) { return true; } return false; } bool Camera3Device::RequestThread::updateSessionParameters(const CameraMetadata& settings) { ATRACE_CALL(); bool updatesDetected = false; Loading Loading @@ -4514,9 +4527,11 @@ bool Camera3Device::RequestThread::updateSessionParameters(const CameraMetadata& if (isDifferent) { ALOGV("%s: Session parameter tag id %d changed", __FUNCTION__, tag); mLatestSessionParams.update(entry); if (!skipHFRTargetFPSUpdate(tag, entry, lastEntry)) { updatesDetected = true; } mLatestSessionParams.update(entry); } } else if (lastEntry.count > 0) { // Value has been removed ALOGV("%s: Session parameter tag id %d removed", __FUNCTION__, tag); Loading
services/camera/libcameraservice/device3/Camera3Device.h +7 −0 Original line number Diff line number Diff line Loading @@ -861,6 +861,11 @@ class Camera3Device : // Check and update latest session parameters based on the current request settings. bool updateSessionParameters(const CameraMetadata& settings); // Check whether FPS range session parameter re-configuration is needed in constrained // high speed recording camera sessions. bool skipHFRTargetFPSUpdate(int32_t tag, const camera_metadata_ro_entry_t& newEntry, const camera_metadata_entry_t& currentEntry); // Re-configure camera using the latest session parameters. bool reconfigureCamera(); Loading Loading @@ -919,6 +924,8 @@ class Camera3Device : // Flag indicating if we should prepare video stream for video requests. bool mPrepareVideoStream; bool mConstrainedMode; static const int32_t kRequestLatencyBinSize = 40; // in ms CameraLatencyHistogram mRequestLatency; Loading