Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 34dfaeb3 authored by Emilian Peev's avatar Emilian Peev Committed by android-build-merger
Browse files

Merge "Camera: Limit framerate re-configurations during HFR" into pi-dev

am: dc784769

Change-Id: Ie8ce5ab016b81da9de73834a03d97f89a017b384
parents 906ba2f1 dc784769
Loading
Loading
Loading
Loading
+16 −1
Original line number Diff line number Diff line
@@ -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()) {
@@ -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(
@@ -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;
@@ -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);
+7 −0
Original line number Diff line number Diff line
@@ -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();

@@ -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;