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

Commit 8a751f23 authored by Shuzhen Wang's avatar Shuzhen Wang Committed by Presubmit Automerger Backend
Browse files

[automerge] Camera: Switch to query function for display sync 2p: 00abbeb7 2p: 7880b134

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/av/+/17059409

Bug: 221499182
Change-Id: I17f2b10ca361033c5e9774a027cbb39f36265fe9
parents 25353211 7880b134
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -82,7 +82,6 @@ cc_library_shared {
        "device3/Camera3OutputUtils.cpp",
        "device3/Camera3DeviceInjectionMethods.cpp",
        "device3/UHRCropAndMeteringRegionMapper.cpp",
        "device3/PreviewFrameScheduler.cpp",
        "device3/hidl/HidlCamera3Device.cpp",
        "device3/hidl/HidlCamera3OfflineSession.cpp",
        "device3/hidl/HidlCamera3OutputUtils.cpp",
@@ -113,7 +112,6 @@ cc_library_shared {
    ],

    shared_libs: [
        "libandroid",
        "libbase",
        "libdl",
        "libexif",
+20 −11
Original line number Diff line number Diff line
@@ -2664,7 +2664,7 @@ void Camera3Device::setErrorStateLockedV(const char *fmt, va_list args) {

status_t Camera3Device::registerInFlight(uint32_t frameNumber,
        int32_t numBuffers, CaptureResultExtras resultExtras, bool hasInput,
        bool hasAppCallback, nsecs_t maxExpectedDuration,
        bool hasAppCallback, nsecs_t minExpectedDuration, nsecs_t maxExpectedDuration,
        const std::set<std::set<String8>>& physicalCameraIds,
        bool isStillCapture, bool isZslCapture, bool rotateAndCropAuto,
        const std::set<std::string>& cameraIdsWithZoom,
@@ -2674,8 +2674,9 @@ status_t Camera3Device::registerInFlight(uint32_t frameNumber,

    ssize_t res;
    res = mInFlightMap.add(frameNumber, InFlightRequest(numBuffers, resultExtras, hasInput,
            hasAppCallback, maxExpectedDuration, physicalCameraIds, isStillCapture, isZslCapture,
            rotateAndCropAuto, cameraIdsWithZoom, requestTimeNs, outputSurfaces));
            hasAppCallback, minExpectedDuration, maxExpectedDuration, physicalCameraIds,
            isStillCapture, isZslCapture, rotateAndCropAuto, cameraIdsWithZoom, requestTimeNs,
            outputSurfaces));
    if (res < 0) return res;

    if (mInFlightMap.size() == 1) {
@@ -3231,13 +3232,16 @@ bool Camera3Device::RequestThread::sendRequestsBatch() {
    return true;
}

nsecs_t Camera3Device::RequestThread::calculateMaxExpectedDuration(const camera_metadata_t *request) {
    nsecs_t maxExpectedDuration = kDefaultExpectedDuration;
std::pair<nsecs_t, nsecs_t> Camera3Device::RequestThread::calculateExpectedDurationRange(
        const camera_metadata_t *request) {
    std::pair<nsecs_t, nsecs_t> expectedRange(
            InFlightRequest::kDefaultMinExpectedDuration,
            InFlightRequest::kDefaultMaxExpectedDuration);
    camera_metadata_ro_entry_t e = camera_metadata_ro_entry_t();
    find_camera_metadata_ro_entry(request,
            ANDROID_CONTROL_AE_MODE,
            &e);
    if (e.count == 0) return maxExpectedDuration;
    if (e.count == 0) return expectedRange;

    switch (e.data.u8[0]) {
        case ANDROID_CONTROL_AE_MODE_OFF:
@@ -3245,13 +3249,15 @@ nsecs_t Camera3Device::RequestThread::calculateMaxExpectedDuration(const camera_
                    ANDROID_SENSOR_EXPOSURE_TIME,
                    &e);
            if (e.count > 0) {
                maxExpectedDuration = e.data.i64[0];
                expectedRange.first = e.data.i64[0];
                expectedRange.second = expectedRange.first;
            }
            find_camera_metadata_ro_entry(request,
                    ANDROID_SENSOR_FRAME_DURATION,
                    &e);
            if (e.count > 0) {
                maxExpectedDuration = std::max(e.data.i64[0], maxExpectedDuration);
                expectedRange.first = std::max(e.data.i64[0], expectedRange.first);
                expectedRange.second = expectedRange.first;
            }
            break;
        default:
@@ -3259,12 +3265,13 @@ nsecs_t Camera3Device::RequestThread::calculateMaxExpectedDuration(const camera_
                    ANDROID_CONTROL_AE_TARGET_FPS_RANGE,
                    &e);
            if (e.count > 1) {
                maxExpectedDuration = 1e9 / e.data.u8[0];
                expectedRange.first = 1e9 / e.data.i32[1];
                expectedRange.second = 1e9 / e.data.i32[0];
            }
            break;
    }

    return maxExpectedDuration;
    return expectedRange;
}

bool Camera3Device::RequestThread::skipHFRTargetFPSUpdate(int32_t tag,
@@ -3879,11 +3886,13 @@ status_t Camera3Device::RequestThread::prepareHalRequests() {
                isZslCapture = true;
            }
        }
        auto expectedDurationRange = calculateExpectedDurationRange(settings);
        res = parent->registerInFlight(halRequest->frame_number,
                totalNumBuffers, captureRequest->mResultExtras,
                /*hasInput*/halRequest->input_buffer != NULL,
                hasCallback,
                calculateMaxExpectedDuration(settings),
                /*min*/expectedDurationRange.first,
                /*max*/expectedDurationRange.second,
                requestedPhysicalCameras, isStillCapture, isZslCapture,
                captureRequest->mRotateAndCropAuto, mPrevCameraIdsWithZoom,
                (mUseHalBufManager) ? uniqueSurfaceIdMap :
+7 −4
Original line number Diff line number Diff line
@@ -306,7 +306,6 @@ class Camera3Device :
    static const nsecs_t       kMinWarnInflightDuration = 5000000000; // 5 s
    static const size_t        kInFlightWarnLimit = 30;
    static const size_t        kInFlightWarnLimitHighSpeed = 256; // batch size 32 * pipe depth 8
    static const nsecs_t       kDefaultExpectedDuration = 100000000; // 100 ms
    static const nsecs_t       kMinInflightDuration = 5000000000; // 5 s
    static const nsecs_t       kBaseGetBufferWait = 3000000000; // 3 sec.
    // SCHED_FIFO priority for request submission thread in HFR mode
@@ -960,8 +959,9 @@ class Camera3Device :
        // send request in mNextRequests to HAL in a batch. Return true = sucssess
        bool sendRequestsBatch();

        // Calculate the expected maximum duration for a request
        nsecs_t calculateMaxExpectedDuration(const camera_metadata_t *request);
        // Calculate the expected (minimum, maximum) duration range for a request
        std::pair<nsecs_t, nsecs_t> calculateExpectedDurationRange(
                const camera_metadata_t *request);

        // Check and update latest session parameters based on the current request settings.
        bool updateSessionParameters(const CameraMetadata& settings);
@@ -1076,7 +1076,7 @@ class Camera3Device :

    status_t registerInFlight(uint32_t frameNumber,
            int32_t numBuffers, CaptureResultExtras resultExtras, bool hasInput,
            bool callback, nsecs_t maxExpectedDuration,
            bool callback, nsecs_t minExpectedDuration, nsecs_t maxExpectedDuration,
            const std::set<std::set<String8>>& physicalCameraIds,
            bool isStillCapture, bool isZslCapture, bool rotateAndCropAuto,
            const std::set<std::string>& cameraIdsWithZoom, const SurfaceMap& outputSurfaces,
@@ -1327,6 +1327,9 @@ class Camera3Device :
    // performance class.
    bool mOverrideForPerfClass;

    // The current minimum expected frame duration based on AE_TARGET_FPS_RANGE
    nsecs_t mMinExpectedDuration = 0;

    // Injection camera related methods.
    class Camera3DeviceInjectionMethods : public virtual RefBase {
      public:
+1 −0
Original line number Diff line number Diff line
@@ -100,6 +100,7 @@ class Camera3FakeStream :

    virtual status_t setBatchSize(size_t batchSize) override;

    virtual void onMinDurationChanged(nsecs_t /*duration*/) {}
  protected:

    /**
+3 −0
Original line number Diff line number Diff line
@@ -246,6 +246,9 @@ class Camera3OfflineSession :
    // For client methods such as disconnect/dump
    std::mutex mInterfaceLock;

    // The current minimum expected frame duration based on AE_TARGET_FPS_RANGE
    nsecs_t mMinExpectedDuration = 0;

    // SetErrorInterface
    void setErrorState(const char *fmt, ...) override;
    void setErrorStateLocked(const char *fmt, ...) override;
Loading